Bonjour,

J'utilise la fonction Lite::MIME et j'ai un souci.
JE fait partir des mail en utilisant le sedmail, tout va bien, mais dès que je veux utiliser le SMTP, j'ai un souci, dès qu'il rencontre une erreur dans un mail (j'envoi plus de 200 000 mails dans ma base), le serveur plante, il me dit :

on Nov 02 22:25:12 2009] [error] [client 87.98.158.210] [Mon Nov 2 22:25:12 2009] dobroadcast.cgi: can't extract address at <"Louis" <louis.fontvielle@nordnet...fr> > in <"Louis" <louis.fontvielle@nordnet...fr> >
[Mon Nov 02 22:25:31 2009] [error] [client 87.98.158.210] Premature end of script headers: dobroadcast.cgi

Il y a bien une erreur dans le mail, des point en trop. Mais il ne faudrait pas bloquer pour cela.


Mon script est :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
use MIME::Lite;
$from = "\"$from_name\" <$from_email>\n";
$to = "\"$fname\" <$email>\n";
if ($smtp eq "1") {
use Net::SMTP;
MIME::Lite->send('smtp',"$smtp_server", Timeout=>60) or die "Error creating multipart container: $!\n";
}
else {
if ($seperatebounce eq 1) {
if ($bounceaddy eq "") {$bounceaddy = "bounce\@$domain";}
$bouncepart = " -f$bounceaddy";
}
MIME::Lite->send("sendmail", "$mailprog -t -oi -oem$bouncepart");
}
$mailmsg = MIME::Lite->new(
From => $from,
To => $to,
"Return-Path:" => "$bounceaddy",
Subject => $subjectline,
Type => 'text/plain',
Data => $message,
"X-Identifier:" => "$subid-$username",
"X-Ip:" => "$ip",

J'ai testé avec MIME::Lite->quiet('smtp',"$smtp_server", Timeout=>60)
Et la avec la fonction QUIET, cela fonctionne, le script continu et les mails partent, mais je ne passe plus par les SMTP (j'ai 5 serveurs en SMTP), mais passe directement par le serveur (je le reconnait avec l'adresse IP)


Alors que la même base fonctionne bien sans passer par SMTP.
Je pense donc que le SMTP vérifie la validité des mails (ce qu' j'ai vu dans cette section de code ci-dessous.

La question est comment éviter la vérification du mail, car dans mes logs, j'ai cela, puis plantage du script

on Nov 02 22:25:12 2009] [error] [client 87.98.158.210] [Mon Nov 2 22:25:12 2009] dobroadcast.cgi: can't extract address at <"Louis" <louis.fontvielle@nordnet...fr> > in <"Louis" <louis.fontvielle@nordnet...fr> >
[Mon Nov 02 22:25:31 2009] [error] [client 87.98.158.210] Premature end of script headers: dobroadcast.cgi
[M

Une idée ?

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#------------------------------
#
# is_mime_field FIELDNAME
#
# Is this a field I manage?
 
sub is_mime_field {
$_[0] =~ /^(mime\-|content\-)/i;
}
 
#------------------------------
#
# extract_full_addrs STRING
# extract_only_addrs STRING
#
# Split STRING into an array of email addresses: somewhat of a KLUDGE.
#
# Unless paranoid, we try to load the real code before supplying our own.
BEGIN {
my $ATOM = '[^ \000-\037()<>@,;:\134"\056\133\135]+';
my $QSTR = '".*?"';
my $WORD = '(?:' . $QSTR . '|' . $ATOM . ')';
my $DOMAIN = '(?:' . $ATOM . '(?:' . '\\.' . $ATOM . ')*' . ')';
my $LOCALPART = '(?:' . $WORD . '(?:' . '\\.' . $WORD . ')*' . ')';
my $ADDR = '(?:' . $LOCALPART . '@' . $DOMAIN . ')';
my $PHRASE = '(?:' . $WORD . ')+';
my $SEP = "(?:^\\s*|\\s*,\\s*)"; ### before elems in a list
 
sub my_extract_full_addrs {
my $str = shift;
return unless $str;
my @addrs;
$str =~ s/\s/ /g; ### collapse whitespace
 
pos($str) = 0;
while ( $str !~ m{\G\s*\Z}gco ) {
### print STDERR "TACKLING: ".substr($str, pos($str))."\n";
if ( $str =~ m{\G$SEP($PHRASE)\s*<\s*($ADDR)\s*>}gco ) {
push @addrs, "$1 <$2>";
} elsif ( $str =~ m{\G$SEP($ADDR)}gco or $str =~ m{\G$SEP($ATOM)}gco ) {
push @addrs, $1;
} else {
my $problem = substr( $str, pos($str) );
die "can't extract address at <$problem> in <$str>\n";
}
}
return wantarray ? @addrs : $addrs[0];
}
 
sub my_extract_only_addrs {
my @ret = map { /<([^>]+)>/ ? $1 : $_ } my_extract_full_addrs(@_);
return wantarray ? @ret : $ret[0];
}
}
#------------------------------