如何在不使用Perl中的其他库的情况下发送电子邮件附件?

时间:2009-05-26 15:15:54

标签: perl email attachment

嘿,我想知道是否有办法在不使用MIME::Lite或任何其他库的情况下将文件(特别是.csv文件)附加到Perl中的邮件消息。

现在,我有一个“邮件程序功能”可以正常工作,但我不确定如何使其适应附加文件。这就是我所拥有的:

open(MAIL, "|/usr/sbin/sendmail -t");
print MAIL "To: cheese\@yahoo.com\n";
print MAIL "From: queso\@what.com\n";
print MAIL "Subject: Attached is $filename\n\n";
print MAIL "$message";
close(MAIL);

我认为这是针对UNIX的。

6 个答案:

答案 0 :(得分:12)

为什么要编写已经存在的代码?可能有一种更好的方法来解决您的任务,而不是重新创建错误并自己维护更多的代码。你在安装模块时遇到问题吗?您也可以使用代码分发第三方模块。

如果你想自己做,你只需要做模块为你做的事情。你可以看一下代码,看看他们做了什么。你这样做。毕竟它是开源的。 :)

答案 1 :(得分:7)

如果您的部分问题是您在共享主机上并且无法安装额外的库,则它们通常可以安装在本地库(例如,〜/ lib)中(并从中使用)。有here以上的说明(在“我没有权限在系统上安装模块!”)。

答案 2 :(得分:2)

让您的生活更轻松的一般风格提示:

即:

open my $mail, '|-', '/usr/sbin/sendmail', '-t'  or Carp::croak("Cant start sendmail, $! $@");

print $mail  "foo";

close $mail or Carp::croak("SendMail might have died! :( , $! $@");

perldoc -f open

答案 3 :(得分:1)

您可以将邮件标题指定为:

Content-Type ie:image / jpeg; NAME = “file.jpg”
内容 - 处置(即)附件;文件名= “name.jpg”
内容传输编码(即)base64

查看附带附件的电子邮件,该邮件可以帮助您解决问题。

诀窍是多部分边界 http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html

答案 4 :(得分:1)

示例 - 将压缩文件作为附件发送电子邮件:

base64 /path/to/my/file.zip | mail -s "Subject" recipient@mydomain.com -a 'Content-Type: application/zip; name="myfile.zip"' -a 'Content-Disposition: attachment' -a 'Content-Transfer-Encoding: base64'

答案 5 :(得分:-1)

print "To: ";       my $to=<>;      chomp $to;
print "From: ";     my $from=<>;    chomp $from;
print "Attach: ";   my $attach=<>;  chomp $attach;
print "Subject: ";  my $subject=<>; chomp $subject;
print "Message: ";  my $message=<>; chomp $message;

my $mail_fh = \*MAIL;
open $mail_fh, "|uuencode $attach $attach |mailx -m -s \"$subject\" -r $from $to";
print $mail_fh $message;
close($mail_fh);
相关问题