Revision 692e001f
Von Moritz Bunkus vor etwa 12 Jahren hinzugefügt
SL/Mailer/SMTP.pm | ||
---|---|---|
49 | 49 |
sub print { |
50 | 50 |
my $self = shift; |
51 | 51 |
|
52 |
$self->{smtp}->datasend(@_); |
|
52 |
# SMTP requires at most 1000 characters per line. Each line must be |
|
53 |
# terminated with <CRLF>, meaning \r\n in Perl. |
|
54 |
|
|
55 |
# First, normalize the string by removing all \r in order to fix |
|
56 |
# possible wrong combinations like \n\r. |
|
57 |
my $str = join '', @_; |
|
58 |
$str =~ s/\r//g; |
|
59 |
|
|
60 |
# Now remove the very last newline so that we don't create a |
|
61 |
# superfluous empty line at the very end. |
|
62 |
$str =~ s/\n$//; |
|
63 |
|
|
64 |
# Split the string on newlines keeping trailing empty parts. This is |
|
65 |
# requires so that input like "Content-Disposition: ..... \n\n" is |
|
66 |
# treated correctly. That's also why we had to remove the very last |
|
67 |
# \n in the prior step. |
|
68 |
my @lines = split /\n/, $str, -1; |
|
69 |
|
|
70 |
# Send each line terminating it with \r\n. |
|
71 |
$self->{smtp}->datasend("$_\r\n") for @lines; |
|
53 | 72 |
} |
54 | 73 |
|
55 | 74 |
sub send { |
Auch abrufbar als: Unified diff
Via SMTP Zeilen normalisiert verschicken
Der SMTP-Standard (RFC 821) verlangt, dass Zeilen nicht länger als
1000 Zeichen sind und mit <CRLF> abgeschlossen werden.
Anhänge kommen in der "sub print" aber als ein großer Blob an, der
zwar schon nach Zeilen aufgespalten ist, aber trotzdem zu groß ist,
sodass der annehmende Server teilweise komische Dinge mit der Eingabe
tut.
Also wirklich nur Zeile für Zeile schicken sowie dafür sorgen, dass
alle Zeilen auch wirklich mit <CRLF> aka \r\n abgeschlossen werden.