VERP 和 perl 后缀不起作用
Posted
技术标签:
【中文标题】VERP 和 perl 后缀不起作用【英文标题】:VERP and perl postfix not working 【发布时间】:2012-07-11 12:47:10 【问题描述】:所以我有一个脚本,我正在尝试让 VERP 在其上正确运行。它使用 MIME::Lite 和 postfix 作为邮件服务器。代码如下:
use strict;
use MIME::Lite;
use LWP::Simple;
use Mail::Verp;
my $email = 'someuser@somesite.com';
Mail::Verp->separator('+');
my $verp_email = Mail::Verp->encode('root@somesite.net', $email);
my $content = '<html><body>Hi!</body></html>';
my $msg = MIME::Lite->new(
Subject => 'Hi',
From => 'root@somesite.net',
To => $email,
'Return-Path' => $verp_email,
Type => 'text/html',
Data => $content
);
$msg->send('smtp', 'XXX.XXX.XXX.XXX');
当邮件被退回时,postfix 不会将其路由到 root@somesite.net 电子邮件收件箱。如何路由邮件以使退回邮件的发件人是 $verp_email 值?
我正在尝试创建包含电子邮件地址的所有退回电子邮件的日志,以便随后可以将其发送到文件或数据库。
如果有人能以此为我指明正确的方向,我将不胜感激。 谢谢。
【问题讨论】:
您有什么具体问题吗? 如何让它正确反弹?原样的代码似乎没有正确发送标头信息。 “似乎没有”只是“它不起作用”的另一个版本。如果您需要帮助,请提出具体问题并附上具体的错误消息和/或行为(或缺乏)。 【参考方案1】:这个问题有点老了,但希望我的回答能对在谷歌搜索时发现这个问题的人有所帮助。 我遇到了同样的问题,根本原因是在与目标服务器进行 smtp 交换期间,您必须使用“MAIL FROM:”。 根据 MAIL FROM smtp 命令,在 MIME::Header 中设置返回路径会被 smtp 服务器本身覆盖。 所以你可以有一个包含 From: root@somesite.net 的邮件信封,但要确保 smtp MAIL FROM 使用 $verp_email 例如,这就是我所做的:
my $msg = MIME::Entity->build(
'Return-Path' => 'bounce+user=user-domain.com@my-server.com',
'From' => 'admin@my-server.com',
'To' => 'user@user-domain.com',
'Subject' => $subject,
'Errors-To' => 'bounce+user=user-domain.com@my-server.com'
);
## Then some more handling with MIME::Entity
## and finally send it over smtp
my @rcpt = $msg->smtpsend(
## Make it verbose for debugging
'Debug' => DEBUG,
'Hello' => 'mx1.my-server.com',
'Host' => 'mx.user-domain.com,
'MailFrom' => 'bounce+user=user-domain.com@my-server.com',
'To' => 'user@user-domain.com',
'Port' => 25,
);
【讨论】:
【参考方案2】:返回路径不是 VERP 地址的正确位置,将被忽略和/或覆盖。您需要将其作为真实的、诚实的 $dmr
、真正的 SMTP 信封发件人 (MAIL FROM:<>
) 地址。
【讨论】:
以上是关于VERP 和 perl 后缀不起作用的主要内容,如果未能解决你的问题,请参考以下文章
使用系统命令将stdout和stderr输出重定向到文件在perl中不起作用[重复]
perl Openssh ConnectionTimeout 不起作用
Perl 控制台:基本命令和 fe_sendauth:没有密码不起作用