Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 使用电子邮件发送::简单,正文中包含收件人/发件人,而不是标题_Perl_Email - Fatal编程技术网

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

Perl 使用电子邮件发送::简单,正文中包含收件人/发件人,而不是标题,perl,email,Perl,Email,目前,我们使用打印通过sendmail管道发送html邮件,效果很好 $fh->open( q{|sendmail -f<fromaddress> .......} ); 我的标题是 [ To => <toaddress>, From => <fromaddress>, 'Content-Type' => 'text/html' ] [To=>,From=>,'Content Type'=>'text/html'] 这一切都发送罚

目前,我们使用打印通过sendmail管道发送html邮件,效果很好

$fh->open( q{|sendmail -f<fromaddress> .......} );
我的标题是

[ To => <toaddress>, From => <fromaddress>, 'Content-Type' => 'text/html' ]
[To=>,From=>,'Content Type'=>'text/html']
这一切都发送罚款,除了它还包括'从:。。To::Subject..作为要显示的html的一部分,而sendmail会使用它

我可以使用regex去掉包含在文本中的标题内容(因为它已经生成了,但感觉很有风险和笨拙),但我想知道,是否有一种简单的方法可以丢弃它,或者只使用html而不是提供给Email::Simple的特定于From/to/Subject的标题


我已经看过了,但看不到任何引用。

我假设
$body
变量包含一个模板文件中的文本。由于这些模板包含标题,它们最终会复制到您的电子邮件正文中

最好的方法是编辑模板以删除标题部分

但是如果由于某种原因不能这样做,可以在将其传递给
create()
方法之前对
$body
进行预处理。也许是这样的:

(undef, $body) = split /\n\n/, $body, 2;

我假设
$body
变量包含一个模板文件中的文本。由于这些模板包含标题,它们最终会复制到您的电子邮件正文中

最好的方法是编辑模板以删除标题部分

但是如果由于某种原因不能这样做,可以在将其传递给
create()
方法之前对
$body
进行预处理。也许是这样的:

(undef, $body) = split /\n\n/, $body, 2;

其实答案比我想象的要简单

如果你只是使用

my $email = Email::Simple->new( $text );
sendmail( $email, { transport => $transport });
它将使用文本/正文中的标题,而不将其包含在正文中

如果你使用

my $email = Email::Simple->create( $text );
sendmail( $email, { transport => $transport });

它似乎需要单独的标题,并将文本中的标题作为发送的主数据/html的一部分发送出去。

实际上,答案比我想象的要简单

如果你只是使用

my $email = Email::Simple->new( $text );
sendmail( $email, { transport => $transport });
它将使用文本/正文中的标题,而不将其包含在正文中

如果你使用

my $email = Email::Simple->create( $text );
sendmail( $email, { transport => $transport });

它似乎需要单独的标题,并将文本中的标题作为发送的主数据/html的一部分发送出去。

为什么电子邮件正文中有“标题”内容?这毫无意义。如果您不是通过管道发送到
sendmail
,请将其删除。这是由于一些旧的遗留代码,而另一个系统使用了这些代码,因此我正在尝试找到一种解决方案,其中不需要修改太多的文件(这可能是此更改的一部分,以后会被删除,但这是一个中间步骤).Email::Simple不知道您自定义的电子邮件正文结构方式。如果您无法重新构造模板,我只能建议您采用剥离自定义方式:
$body=~s\A.*?\r\n\r\n!!s为什么你的邮件正文中有“标题”的内容?这毫无意义。如果您不是通过管道发送到
sendmail
,请将其删除。这是由于一些旧的遗留代码,而另一个系统使用了这些代码,因此我正在尝试找到一种解决方案,其中不需要修改太多的文件(这可能是此更改的一部分,以后会被删除,但这是一个中间步骤).Email::Simple不知道您自定义的电子邮件正文结构方式。如果您无法重新构造模板,我只能建议您采用剥离自定义方式:
$body=~s\A.*?\r\n\r\n!!s不应该被拆分(/\r\n\r\n/,…)
?当然,除非这是
$body
,然后再交给Email::Simple。。。。另外,如果
$body
包含一个以上的空行,这将破坏
$body
。使用三参数版本的
split
应该可以工作:
(undef,$body)=split/\n\n/,$body,2@Corion:抓得好。已修复。@StefanBecker:正如我所说,“在将其传递给create()方法之前”。这不应该是
拆分(/\r\n\r\n/,…)
?当然,除非这是
$body
,然后再交给Email::Simple。。。。另外,如果
$body
包含一个以上的空行,这将破坏
$body
。使用三参数版本的
split
应该可以工作:
(undef,$body)=split/\n\n/,$body,2@Corion:抓得好。已修复。@StefanBecker:正如我所说,“在将其传递给create()方法之前”。