当前,我们正在使用打印通过sendmail管道发送html邮件,效果很好。
$fh->open( q{|sendmail -f<fromaddress> .......} );
这来自一个模板,其中包含类似...的文字
From: <Fromaddress>
Reply-to: <replyaddress>
Subject: etc
Mine-Version: 1.o
Content-Type: text/html
<!DOCTYPE html...
<html...
rest of body
我现在正尝试使用Email :: Simple和相同的文字
my $email = Email::simple->create(
header => $header,
body => $body
);
sendmail( $email, { transport => $transport });
我的标题就像
[ To => <toaddress>, From => <fromaddress>, 'Content-Type' => 'text/html' ]
这一切都很好,除了它还包含“发件人:..收件人::主题..”作为要显示的html的一部分,而sendmail则使用了它。
我可以使用正则表达式去掉文本中包含的标题内容(因为它已经生成了,但是感觉容易产生风险和笨拙),但是我想知道是否有一种Email :: Simple方式可以丢弃它,或仅使用html代替提供给Email :: Simple的“自/至/主题”特定标头?
我看过here,但看不到任何引用。
答案 0 :(得分:2)
我假设您的$body
变量包含一个模板文件中的文本。由于这些模板包含标题,因此它们最终将在您的电子邮件正文中重复。
最好的方法是编辑模板以删除标题部分。
但是,如果由于某种原因而无法执行此操作,则可以对$body
进行预处理,然后再将其传递给create()
方法。可能是这样的:
(undef, $body) = split /\n\n/, $body, 2;
答案 1 :(得分:2)
实际上答案比我想象的要简单...
如果您只是使用
my $email = Email::Simple->new( $text );
sendmail( $email, { transport => $transport });
它将使用文本/正文中的标题,而不将它们包含在主体中。
如果您使用
my $email = Email::Simple->create( $text );
sendmail( $email, { transport => $transport });
似乎需要单独的标头,然后将标头中的标头作为已发送的主要data / html的一部分发送出去。