]>
git.p6c8.net - selfforum.git/blob - selfforum-cgi/shared/Mail.pm
3 ##############################################
5 # Autor: n.d.p. nd@o3media.de #
7 # Letze Aenderung: n.d.p. / 2001-01-03 #
9 # ========================================== #
12 # ganz simples Formatieren und Senden #
13 # einer Mail im text/plain, qp-Format #
15 ##############################################
21 use vars
qw($mailbox $mailprog @EXPORT);
23 use autouse 'CheckRFC' => qw(is_email($));
29 use base
qw(Exporter);
30 @EXPORT = qw(is_mail_address send_mail);
32 ########################################
37 # Ueberpruefen der Syntax einer
42 ########################################
44 sub is_mail_address
($) {
45 return is_email
$_[0];
48 ########################################
53 # Senden der Nachricht
54 # ueber open-print-close
55 # $Mail::mailprog enthaelt
56 # den vollstaendigen string fuer
57 # open, dass heisst, es kann
58 # auch ein Dateiname sein.
62 ########################################
68 open MAIL
,$mailprog or return 0;
69 print MAIL
&as_string
($param);
70 close MAIL
and return 1;
72 # Hier muss irgendwas schiefgelaufen sein
76 ##########################################
81 # Bereitstellung der gesamten Mail
86 ##########################################
91 my $header=&header_as_string
($param);
92 my $body=&body_as_string
($param);
98 ##########################################
103 # Bereitstellung des Bodys
104 # als (qp-codierten) String.
108 ##########################################
113 &encode_qp
($param->{body
});
116 ##########################################
118 # sub header_as_string
121 # Bereitstellung des Headers
126 ##########################################
128 sub header_as_string
{
131 my $string="Content-Disposition: inline\n";
132 $string.="MIME-Version: 1.0\n";
133 $string.="Content-Transfer-Encoding: quoted-printable\n";
134 $string.="Content-Type: text/plain\n";
135 $string.="Date: ".&rfc822_date
(time)."\n";
136 $string.="From: ".$param->{'from'}."\n";
137 $string.=&get_list
('To',$param->{'to'});
138 $string.=&get_list
('Cc',$param->{'cc'});
139 $string.=&get_list
('Bcc',$param->{'bcc'});
140 $string.="Subject: ".encode_qp
($param->{'subject'})."\n";
146 #######################################
150 # C&P aus dem Modul MIME::QuotedPrint
152 #######################################
157 $res =~ s/([^ \t\n!-<>-~])/sprintf("=%02X", ord($1))/eg; # rule #2,#3
159 join('', map { sprintf("=%02X", ord($_)) }
161 )/egm
; # rule #3 (encode whitespace at eol)
163 # rule #5 (lines must be shorter than 76 chars, but we are not allowed
164 # to break =XX escapes. This makes things complicated :-( )
165 my $brokenlines = "";
166 $brokenlines .= "$1=\n"
167 while $res =~ s
/(.*?
^[^\n]{73} (?
:
168 [^=\n]{2} (?
! [^=\n]{0,1} $) # 75 not followed by .?\n
169 |[^=\n] (?
! [^=\n]{0,2} $) # 74 not followed by .?.?\n
170 | (?
! [^=\n]{0,3} $) # 73 not followed by .?.?.?\n
176 ##############################################
181 # Aufbereitung einer Liste oder eines
182 # Strings fuer den Header (To, Cc, Bcc)
185 # Ergebnis oder nichts
186 ##############################################
189 my ($start,$list)=splice @_;
191 return $start . ': ' . $list . "\n" if (defined $list and not ref $list and length $list);
193 return $start . ': ' . join (', ',@
$list) . "\n" if (ref $list);
198 ##############################################
203 # Bereitstellung eines RFC-konformen
208 ##############################################
210 sub rfc822_date
($) {
211 my ($sek, $min, $std, $mtag, $mon, $jahr, $wtag) = gmtime (+shift);
213 sprintf ('%s, %02d %s %04d %02d:%02d:%02d GMT',
214 (qw(Sun Mon Tue Wed Thu Fri Sat))[$wtag],
216 (qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec))[$mon],
217 $jahr+1900, $std, $min, $sek);
220 ##############################################
221 # Modulinitialisierung
225 # Bereitstellung des Regexps und des
227 ##############################################
230 # Standard-Mailprogramm
232 # Dieser String wird so, wie er ist, an die open-Anweisung geschickt,
233 # -t = tainted(?),der Header (=alles bis zur ersten Leerzeile)
234 # wird nach To:, Cc: und evtl. Bcc: abgesucht.
235 # -oi = damit wird verhindert, dass sendmail, ein Zeile, wo nur ein
236 # Punkt drinsteht, als Mailende erkennt( waere Standard ).
237 # ===================================================================
239 $mailprog = '|/usr/lib/sendmail -t -oi';
242 # keeping require happy
245 #####################
247 #####################
patrick-canterino.de