我正在编写一个小的 Perl 应用程序来在我工作的内部发送电子邮件,但是我遇到了附件问题。现在,我可以听到你们所有人都在尖叫“使用 MIME::Lite”,但这并不是那么容易——管理规则告诉我,我无法使用 cpan 中的任何东西......
无论如何,我正在使用 MIME::Base64 对我发送的任何附件进行编码。我将 Net::SMTP 用于电子邮件方面。
编码是这样完成的(直接从 Perldoc 页面出来):
my $encoded = "";
use MIME::Base64 qw(encode_base64);
open (FILE, "7857084216_9816ae9bec_b.jpg") or die "$!\n";
while (read(FILE, $buf, 60*57)) {
$encoded .= encode_base64($buf);
}
相关的 Net::SMTP 代码如下:
use Net::SMTP;
$smtp = Net::SMTP->new("mailserver",
Hello => 'somedomain.com.au',
Timeout => 60,
Debug => 0,
);
$smtp->mail(<services\@somedomain.com.au>);
$smtp->to(<me\@somedomain.com.au>);
$smtp->cc(<another\@somedomain.com.au>);
$smtp->data();
$smtp->datasend("Subject: testing 123\n");
$smtp->datasend("To: me\@somedomain.com.au\n");
$smtp->datasend("CC: another\@somedomain.com.au\n");
$smtp->datasend("MIME-Version: 1.0\n");
$smtp->datasend("Content-type: multipart/mixed;\n\tboundary=\"$boundary\"\n");
$smtp->datasend("--$boundary\n");
$smtp->datasend("Content-type: text/html; charset=utf-8\n");
$smtp->datasend("\n");
$smtp->datasend("<p> Test Email!</p>\n");
$smtp->datasend("\n");
$smtp->datasend("--$boundary\n");
$smtp->datasend("Content-type: image/jpeg; name=\"7857084216_9816ae9bec_b.jpg\"\n");
$smtp->datasend("Content-ID: \n");
$smtp->datasend("Content-Disposition: attachment; filename=\"7857084216_9816ae9bec_b.jpg\"\n");
$smtp->datasend("Content-transfer-encoding: base64\n");
$smtp->datasend("\n");
$smtp->datasend("$encoded");
$smtp->datasend("\n");
$smtp->datasend("--$boundary--\n");
$smtp->dataend;
$smtp->quit;
此刻,我将这些电子邮件发送给自己并使用 Outlook 2010 阅读它们发送图像(例如 jpegs)时,我根本没有任何问题 - 据我所知,一切似乎都在逐字节解码. 当我发送纯文本的 docx 类型文件时,一切似乎都很好。但是,当我发送插入图像的 docx 文件时,文件已损坏。
不是邮件发送和附件方面的专家,我有点茫然。我应该如何编码 docx 文件以附加到电子邮件?任何帮助,将不胜感激!
还忘了提及,我已尝试相应地设置内容类型: 内容类型:application/vnd.openxmlformats-officedocument.wordprocessingml.document