如何使用 perl 和 sendmail 从 URL 发送 pdf [Mail::Sendmail]

Posted

技术标签:

【中文标题】如何使用 perl 和 sendmail 从 URL 发送 pdf [Mail::Sendmail]【英文标题】:How to send pdf from URL using perl and sendmail [Mail::Sendmail] 【发布时间】:2020-12-21 22:05:10 【问题描述】:

我有一个需要更改的旧版应用。它是用 perl 编写的,使用 send::mail 向用户发送邮件。以前我们在电子邮件正文中发送链接,但现在他们需要 pdf 附件。 PDF 是使用 php 在另一台服务器上生成的。

工作流程是

    创建电子邮件正文 通过 URL 从另一个服务器获取 pdf 将 pdf 作为电子邮件的附件添加 发送。

我觉得可以用

use LWP::Simple;
unless (defined ($content = get $URL)) 
    die "could not get $URL\n";

获取 URL 的内容,但我不知道如何将该 var 用作 sendmail 中的附件。当前的发送邮件代码是:

my %maildata = (To  => $to,
        From    => 'OurSite - Billing <billing@ourSite.com>',
        Organization => 'OurSite, LLC      http://www.OurSite.com/',
        Bcc => 'sent-billing@ourSite.com',
        Subject => $subject$message || 'ourSite invoice',
        Message => $body
           );
print STDERR "notify1 now calling sendmail\n";
sendmail(%maildata) || print STDERR $Mail::Sendmail::error;

我遇到的另一个问题是我不知道如何确定我拥有的 sendmail 版本(旧的 freebsd 系统)是否甚至能够发送附件?

【问题讨论】:

如果您的代码可以生成有效的 MIME 消息,比您自己更早的 Sendmail 版本将很乐意提供它。 我 52 岁,你确定吗?哈哈 那么你有一些余量 (-: 但无论如何,如果你的邮件服务器能够与其他邮件服务器互操作,它会很好地处理任何有效的 SMTP 消息,而不知道或关心什么它的内容是(排除大小限制;例如,某些邮件服务器被配置为不允许大于 50 MB 的邮件)。 【参考方案1】:

好的,感谢那些给我一些方向/愿意尝试的海报。

最后,我构建了 mime 主体,执行以下操作

use LWP::Simple;
use MIME::Base64;

unless (defined ($content = get $URL)) 
    die "could not get $URL\n";
 
my $pdfencoded = encode_base64($content);  

my %maildata = (To  => $to,
        From    => 'OurSite - Billing <billing@ourSite.com>',
        Organization => 'OurSite, LLC      http://www.OurSite.com/',
        Bcc => 'sent-billing@ourSite.com',
        Subject => $subject$message || 'ourSite invoice',

           );

my $boundary = "====" . time() . "====";

$maildata'content-type' = "multipart/mixed; boundary=\"$boundary\"";
$maildata'Message' = "--".$boundary."\n"."Content-Type: text/plain\n".$body.
"\n--".$boundary."\nContent-Transfer-Encoding: base64\nContent-Type: 
application/pdf; name=\"invoice.pdf\"\n".$pdfencoded."\n--".$boundary."--";

sendmail(%maildata) || print STDERR $Mail::Sendmail::error;

这给了我为正文内容手动构建的 MIME 格式。

感谢您的帮助!

【讨论】:

以上是关于如何使用 perl 和 sendmail 从 URL 发送 pdf [Mail::Sendmail]的主要内容,如果未能解决你的问题,请参考以下文章

sendmail邮件服务搭建详细解   小小子

在 Windows 10 上使用 Mail::Sendmail 模块连接到 localhost 失败

如何使用 Perl Email::Mime 内联图像?

如何使用sendEmail发送邮件

sendmail:如何在 ubuntu 上配置 sendmail? [关闭]

怎样用Sendmail发送HTML格式的邮件