如何在 sendmail 中使用 Email::Mime
How to use Email::Mime with sendmail
我正在尝试使用脚本发送 HTML 电子邮件。我将不得不使用本机 unix 东西和 Email::Mime
,因为这些是我发现安装在我坚持使用的盒子中的唯一东西。我正在创建 Email::Mime
邮件并将其发送到 sendmail。
但我不断收到错误消息:在 header 中找不到收件人地址
我已经看到其他 RUBY 脚本使用 sendmail
所以它适用于这个盒子。
有人可以帮助我解决以下代码段中我可能做错的地方吗?
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);
}
提前致谢。
首先,如果您的电子邮件服务器需要身份验证(当然大部分都需要),您需要指定一个 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 不同)或属性哈希内容。
print MAIL $email;
应该是
print MAIL $email->as_string;
我正在尝试使用脚本发送 HTML 电子邮件。我将不得不使用本机 unix 东西和 Email::Mime
,因为这些是我发现安装在我坚持使用的盒子中的唯一东西。我正在创建 Email::Mime
邮件并将其发送到 sendmail。
但我不断收到错误消息:在 header 中找不到收件人地址
我已经看到其他 RUBY 脚本使用 sendmail
所以它适用于这个盒子。
有人可以帮助我解决以下代码段中我可能做错的地方吗?
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);
}
提前致谢。
首先,如果您的电子邮件服务器需要身份验证(当然大部分都需要),您需要指定一个 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 不同)或属性哈希内容。
print MAIL $email;
应该是
print MAIL $email->as_string;