Forum Webscript.Ru
Программирование => Perl => Тема начата: shaman от 18 Марта 2001, 03:56:38
-
Помогите пожалуйста, никак не получается отослать письмо с вложеной картинкой, для этого я использую модуль MIME::Lite, вайл, максимум что получается, так это отслать файл размером 0 байт.
Вот код:
----------------------------------------------
#!/usr/bin/perl -w
########################################
# **************************************
# VARIABLES
# **************************************
my($path);
$path="../cgi-bin";
########################################
use strict;
use CGI::Carp qw (fatalsToBrowser);
use CGI qw/:standard/;
require "$path/Lite.pm";
$CGI::POST_MAX=131072;
###################
my($subject,$from,$to,$upfile1,$message);
if (param())
{
$subject=param(\'subject\');
$subject=~s/</g;
$from=param(\'from\');
$from=~s/@/\\@/g;
$upfile1=param(\'upfile1\');
$upfile1=~s/\\\\/\\//g;
$message=param(\'message\');
$message=~s/</g;
$to=param(\'to\');
$to=~s/@/\\@/g;
}
if ($subject eq "" || $subject eq " " || $from eq "" || $from eq " " || $to eq "" || $to eq "")
{
print "Content-type: text/html
";
print "You didn\'t fill from, to, or subject
";
}
else
{
######### SEND MESSAGE BEGIN ###################
# $upfile1=$ARGV[0] || die "missing path to GIF";
my $msg = MIME::Lite->new(From => "$from",
To =>"$to",
Subject =>"$subject",
Type =>\'Text\',
Data =>"$message");
unless ($upfile1 eq "")
{
$path=$upfile1;
$msg->attach(
Encoding =>\'base64\',
Path =>$path,
Type =>\'image/gif\',
Filename => \'logo.gif\'
);
}
MIME::Lite->send(\'sendmail\', \'/usr/sbin/sendmail -t -oi\');
$msg->send;
########### SEND MESSAGE END ####################
print "Content-type: text/html
";
print "The message was sent
";
}
----------------------------------------------------------
Большое спасибо
-
А получается принимаемы файл сохранить на диске?
Получается вообще отправить письмо с текстом без вложения?
-
Light Elf (18-03-2001 20:38):
А получается принимаемы файл сохранить на диске?
Получается вообще отправить письмо с текстом без вложения?
И сохранять получается, и письмо без вложения отправляется???
Может кто другим путем это делает, так подскажите.
Сенкс
-
shaman (18-03-2001 22:14):
Light Elf (18-03-2001 20:38):
А получается принимаемы файл сохранить на диске?
Получается вообще отправить письмо с текстом без вложения?
И сохранять получается, и письмо без вложения отправляется???
Может кто другим путем это делает, так подскажите.
Сенкс
Я делаю так:
use CGI;
use MIME::Base64 qw(encode_base64);
$cgi = new CGI;
# attachment: file body
if ( defined $cgi->param(\'file\') && $cgi->param(\'file\') ne \'\') {
# flag
$attachment = 1;
# get and decode file content
$attFName = $cgi->param(\'file\');
$tmpFName = $cgi->tmpFileName($attFName);
($shortFName) = ($attFName =~ /.*[\\/\\\\](.*?)$/);
unless ( open FILE, "<$tmpFName") {
$attBody = \'cannot open and decode file\';
} else {
binmode FILE;
$attBody = \'\';
while (read(FILE, $buf, 60*57)) {
$attBody .= encode_base64($buf);
}
close FILE;
}
}
# Mail the message
unless ( open ( TMP, "| /usr/sbin/sendmail -f \\"$from\\" -oi $to" ) ) {
print "Content-type: text/html
";
print "Error: Cannont send e-mail!"
exit 0 ;
}
# print common header of the message
print TMP "From: $from
";
print TMP "To: $to
";
print TMP "Subject: $subject
";
# print headers for attachment (if exists)
if ($attachment) {
print TMP "MIME-Version: 1.0
";
print TMP "Content-Type: multipart/mixed; boundary=\\"nextpart\\"
";
print TMP "
";
print TMP "--nextpart
";
}
# print end of header
print TMP "
";
# print message body
print TMP $message;
# print attachment
if ($attachment) {
print TMP "--nextpart
";
print TMP "Content-Type: application/octet-stream; name=\\"$shortFName\\"
";
print TMP "Content-Transfer-Encoding: base64
";
print TMP "Content-Disposition: attachment; filename=\\"$shortFName\\"
";
print TMP "
";
print TMP $attBody;
print TMP "--nextpart--
";
}
close TMP ;
print "Content-type: text/html
";
print "The message was sent
";