如何使用Email :: Mime与sendmail

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Email :: Mime与sendmail相关的知识,希望对你有一定的参考价值。

我正在尝试使用脚本发送html电子邮件。我将不得不使用本机unix的东西和Email::Mime,因为这些是我发现安装在盒子里的唯一东西我被困住了。我正在创建一个Email::Mime消息并将其发送到sendmail。

但我一直得到错误:在标题中找不到收件人地址我已经看到使用sendmail的其他RUBY脚本,因此适用于此框。

在下面的片段中,有人可以帮助我解决我可能做错的事吗?

sub send_mail(){

use MIME::QuotedPrint;
use HTML::Entities;
use IO::All;
use Email::MIME;

# multipart message
my @parts = (
    Email::MIME->create(
        attributes => {
            content_type => "text/html",
            disposition  => "attachment",
            encoding     => "quoted-printable",
            charset      => "US-ASCII",
        },
        body_str => "Hello there!",
    ),
);

my $email = Email::MIME->create(
    header_str => [
        To => 'abc@xxx.com',
        From => 'abc@xxx.com',
        Subject => "Test Email",
    ],
    parts      => [@parts],
);

# die $email->as_string;
# die YAML::XS::Dump(\%mail);

open(MAIL, "|/usr/sbin/sendmail -t");

print MAIL $email;

close (MAIL);

}

提前致谢。

答案
print MAIL $email;

应该

print MAIL $email->as_string;
另一答案

首先,如果您的电子邮件服务器需要身份验证(当然大部分都是这样),您需要指定一个SMTP会话:

$transport = EMail::Sender::Transport::SMTP::Persistent->new({
  # host, port, ssl, etc
})

此外,我认为您实际上不需要将内容创建为自己的MIME内容。我在自己的作品中使用了类似的东西:

$email = Email::MIME->Create(
  header_str => [ ... ],
  body_str => $message,
  attributes => {
    charset => 'UTF-8',
    encoding => 'base64',
    content_type => 'text/html',
  }
)

通过sendmail($email, { transport => $transport })发送邮件后,您需要通过$transport->disconnect关闭会话。

对于您的应用程序,您可能需要调整一些内容,例如实际发送协议(如果与SMTP不同)或属性哈希内容。

以上是关于如何使用Email :: Mime与sendmail的主要内容,如果未能解决你的问题,请参考以下文章

在 Python 中构建电子邮件时,我应该何时使用 email.message.Message 与 email.mime.text.MIMEText?

如何使用 Email::MIME 更改一个部分的正文?或者:body_set 对谁起作用?

python3之模块SMTP协议客户端与email邮件MIME对象

使用 Email::MIME 和 multipart/signed 解析电子邮件

使用 Email::MIME 和 multipart/mixed with subparts 解析电子邮件

Python遇到ModuleNotFoundError: No module named 'email.mime'; 'email' is not a package问