VERP和perl postfix无法正常工作

时间:2012-07-11 19:59:23

标签: perl email mime postfix-mta verp

所以我有一个脚本,我试图让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值?

我正在尝试使用所包含的电子邮件地址创建所有退回电子邮件的日志,以便可以将其发送到文件或数据库。

如果有人能指出我正确的方向,我将非常感激。 感谢。

2 个答案:

答案 0 :(得分:0)

返回路径不是VERP地址的正确位置,将被忽略和/或覆盖。您需要将其作为实际的,诚实的$dmr真实SMTP信封发件人(MAIL FROM:<>)地址。

答案 1 :(得分:0)

这个问题有点陈旧,但希望我的回答能够帮助那些在谷歌搜索时发现这一点的人。 我遇到了同样的问题,根本原因是你必须在与目标服务器的smtp交换过程中使用“MAIL FROM:”。 设置MIME :: Header中的返回路径会被smtp服务器本身精确地基于MAIL FROM 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,
);