2010-09-15 16 views
2

Il s'agit probablement d'une question croisée valide pour SO et SF. J'utilise un script Perl comme suit pour envoyer un courrier électronique:Pourquoi MIME :: Lite de Perl échoue-t-il lorsque la commande "Données SMTP() a échoué: 2.1.5 ... Destinataire ok"?

my $SMTP_SERVER = 'xx.xx.xx.xx'; 
my $DEFAULT_SENDER = '[email protected]';  
my $DEFAULT_RECIPIENT = '[email protected]'; 

### Create the multipart "container": 
$msg = MIME::Lite->new(
    From =>$DEFAULT_SENDER, 
    To  =>$input{to}, 
    Cc  =>$DEFAULT_SENDER, 
    Subject =>$input{mailsubject}, 
    Type =>'multipart/mixed' 
); 


my $msgbody="<body bgcolor=\"#C0C0C0\">\n"; 
    $msgbody.="<img src="cid:xyz.gif"><br>O hai thar.." 
    $msgbody.="</body>"; 


### Add the text message part: 
### (Note that "attach" has same arguments as "new"): 
$msg->attach(
    Type  =>'text/html', 
    Data  =>$msgbody 
); 

### Add the logo image part:  
$msg->attach(
    Type => 'image/gif', 
    Id => 'xyz.gif', 
    Path => '/var/www/images/xyz.gif', 
); 


### Add the file part: 
$msg->attach(
    Type  =>'application/zip', 
    Path  =>$input{fullpath}, 
    Filename =>$input{file}, 
    Disposition => 'attachment' 
); 

open ERROR, '>>', "/debug/error.txt" or die $!; 
STDERR->fdopen(\*ERROR, 'w'); 

eval{ 

# send the email 
MIME::Lite->send('smtp', $SMTP_SERVER, Timeout=>30, Debug=>1, Notify => ['FAILURE','DELAY'], SkipBad => 1); 
$msg->send(); 

1; 
} 
or do{&error([email protected])}; 

close ERROR; 

Maintenant ce script fonctionne agréable pour 98% des e-mails envoyés .. mais .. le grand client de 2% est celui que je J'essaie de comprendre maintenant. Chaque fois que j'envoie à ce client en particulier, je reçois le message: La commande SMTP data() échoue: 2.1.5 ... Destinataire ok.

Quelqu'un at-il déjà vu cette erreur ou avez-vous une idée de l'endroit où se trouve mon problème? J'ai essayé de remplacer le X-Mailer: l'en-tête pensait que le spam était filtré. J'ai essayé d'envoyer le même message à d'autres personnes sur notre domaine et cela ne fonctionne pas pour l'URL de ce client.

tête d'exemple ci-dessous:

MIME-Version: 1.0 
Content-Transfer-Encoding: binary 
Content-Type: multipart/mixed; 
boundary="_----------=_12845827796770" 
X-Mailer: MIME::Lite 3.027 (F2.76; T1.29; A2.03; B3.07_01; Q3.07) 
Date: Wed, 15 Sep 2010 13:37:59 -0700 
From: [email protected] 
To: [email protected], [email protected], [email protected] 
Cc: [email protected] 
Subject: TEST 

Des indices?

En outre, l'envoi direct d'un courrier électronique à l'aide d'Outlook avec les mêmes pièces jointes fonctionne parfaitement avec ce client et le même serveur SMTP. Ce n'est que lors de l'envoi via ce processus automatisé que l'erreur se pose, c'est laide.

Mise à jour: journal de débogage (qui m'a pense qu'il est un gros problème de latence où les réponses reviennent asynch et arrosant le flux normal des activités dans le processus de MIME :: Lite)

MIME::Lite::SMTP>>> MIME::Lite::SMTP 
MIME::Lite::SMTP>>> Net::SMTP(2.31) 
MIME::Lite::SMTP>>>  Net::Cmd(2.29) 
MIME::Lite::SMTP>>>  Exporter(5.62) 
MIME::Lite::SMTP>>>  IO::Socket::INET(1.31) 
MIME::Lite::SMTP>>>  IO::Socket(1.30_01) 
MIME::Lite::SMTP>>>   IO::Handle(1.27) 
MIME::Lite::SMTP=GLOB(0x84ac258)<<< 220 smpt.xxx.com ESMTP Sendmail 8.12.9/8.13.1; Wed, 15 Sep 2010 16:50:44 -0700 (PDT) 
MIME::Lite::SMTP=GLOB(0x84ac258)>>> EHLO localhost.localdomain 
MIME::Lite::SMTP=GLOB(0x84ac258)<<< 250-smpt.xxx.com Hello [xx.xx.xx.xx], pleased to meet you 
MIME::Lite::SMTP=GLOB(0x84ac258)<<< 250-ENHANCEDSTATUSCODES 
MIME::Lite::SMTP=GLOB(0x84ac258)<<< 250-PIPELINING 
MIME::Lite::SMTP=GLOB(0x84ac258)<<< 250-8BITMIME 
MIME::Lite::SMTP=GLOB(0x84ac258)<<< 250-SIZE 
MIME::Lite::SMTP=GLOB(0x84ac258)<<< 250-DSN 
MIME::Lite::SMTP=GLOB(0x84ac258)<<< 250-ETRN 
MIME::Lite::SMTP=GLOB(0x84ac258)<<< 250-DELIVERBY 
MIME::Lite::SMTP=GLOB(0x84ac258)<<< 250 HELP 
MIME::Lite::SMTP=GLOB(0x84ac258)>>> MAIL FROM:<[email protected]> 
MIME::Lite::SMTP=GLOB(0x84ac258)<<< 250 2.1.0 <[email protected]>... Sender ok 
MIME::Lite::SMTP=GLOB(0x84ac258)>>> RCPT TO:<[email protected]> 
[Wed Sep 15 16:41:22 2010] myemailscript.cgi: MIME::Lite::SMTP=GLOB(0x84ac258): Timeout at /usr/local/share/perl/5.10.0/MIME/Lite.pm line 2889 
MIME::Lite::SMTP=GLOB(0x84ac258)>>> RCPT TO:<[email protected]> 
[Wed Sep 15 16:41:52 2010] myemailscript.cgi: MIME::Lite::SMTP=GLOB(0x84ac258): Timeout at /usr/local/share/perl/5.10.0/MIME/Lite.pm line 2889 
MIME::Lite::SMTP=GLOB(0x84ac258)>>> RCPT TO:<[email protected]> 
[Wed Sep 15 16:42:22 2010] myemailscript.cgi: MIME::Lite::SMTP=GLOB(0x84ac258): Timeout at /usr/local/share/perl/5.10.0/MIME/Lite.pm line 2889 
MIME::Lite::SMTP=GLOB(0x84ac258)>>> RCPT TO:<[email protected]> 
MIME::Lite::SMTP=GLOB(0x84ac258)<<< 250 2.1.5 <[email protected]>... Recipient ok 
MIME::Lite::SMTP=GLOB(0x84ac258)>>> DATA 
MIME::Lite::SMTP=GLOB(0x84ac258)<<< 250 2.1.5 <[email protected]>... Recipient ok 
+2

Je vois que Debug est activé pendant 'MIME :: Lite-> send'. Pouvez-vous poster ce journal? – cjm

+2

'use strict; utilisez les avertissements; ' – Ether

+0

curieux si c'est seulement parce que vous incluez le' body' et non le 'html' /' head', ou si cela compte? – vol7ron

Répondre

3

Le client Net :: SMTP semble expirer, mais les réponses aux TO RCTP arrivent finalement quand elles ne sont plus attendues. Essayez de définir le délai d'attente à 300 secondes au lieu de 30?

+0

C'est ce que je supposais à ce stade après avoir examiné la séquence du journal de débogage. Un peu préoccupé par le fait que cela prend tellement de temps quand tous les autres clients n'ont pas ce problème. Je vais tester quelques valeurs de timeout différentes. – George

+0

Bien que pas idéal d'augmenter le délai d'attente travaillé pour ce cas. Merci pour votre contribution. – George

+0

@George Depuis ce journal de débogage, vous pouvez voir qu'il a fallu entre 90 et 120 secondes pour répondre au premier RCPT TO. Vous devriez expérimenter pour voir si c'est cohérent. – ysth