目前我们正在使用打印通过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
我现在正在尝试使用相同的文本使用电子邮件::简单
my $email = Email::simple->create(
header => $header,
body => $body
);
sendmail( $email, { transport => $transport });
我的标题就像
[ To => <toaddress>, From => <fromaddress>, 'Content-Type' => 'text/html' ]
这一切都发送正常,除了它还包括"发件人:..To:: Subject.." 作为要显示的 html 的一部分,而 sendmail 会使用它。
我可以使用正则表达式来去除文本中包含的标题内容(因为它已经生成,但感觉容易冒险且笨拙(,但我想知道,是否有一种 Email::Simple 方法可以丢弃它,或者仅使用 html 而不是提供给 Email::Simple 的 From/To/Subject 特定标头?
我看过这里,但看不到任何参考。
我假设您的$body
变量包含来自其中一个模板文件的文本。由于这些模板包含标题,因此它们最终将在电子邮件正文中重复。
最好的方法是编辑模板以删除标题部分。
但是,如果由于某种原因无法执行此操作,则可以在将$body
传递给create()
方法之前对其进行预处理。像这样的东西,也许:
(undef, $body) = split /nn/, $body, 2;
其实答案比我想象的要简单......
如果你只是使用
my $email = Email::Simple->new( $text );
sendmail( $email, { transport => $transport });
它将使用文本/正文中的标题,而不是将它们包含在主体中。
如果您使用
my $email = Email::Simple->create( $text );
sendmail( $email, { transport => $transport });
它似乎需要单独的标题,并将文本中的标题作为发送的主要数据/html的一部分发送出去。