2

嘿,我想知道是否有一种方法可以在不使用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 的。

4

6 回答 6

12

为什么要编写已经存在的代码?解决您的任务可能有比重新创建错误和自己维护更多代码更好的方法。您在安装模块时遇到问题吗?您也可以通过多种方式将第三方模块与您的代码一起分发。

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

于 2009-05-26T15:29:25.277 回答
7

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

于 2009-05-26T15:31:54.787 回答
2

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

IE:

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 打开

于 2009-05-26T15:22:07.273 回答
1

您可以将邮件头指定为:

内容类型即:image/jpeg;name="file.jpg"
Content-Disposition(即)附件;filename="name.jpg"
Content-Transfer-Encoding (ie) base64

查看带有附件的电子邮件,这应该对您有所帮助。

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

于 2009-05-26T15:23:12.497 回答
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'
于 2015-03-10T09:28:20.470 回答
-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);
于 2010-05-21T12:27:19.363 回答