使用电子邮件发送::简单,正文文本中的收件人/发件人而不是标题



目前我们正在使用打印通过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的一部分发送出去。

最新更新