使用Email :: Simple在正文中使用To / From,而不是标题

时间:2019-02-04 15:39:54

标签: perl email

当前,我们正在使用打印通过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,但看不到任何引用。

2 个答案:

答案 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的一部分发送出去。