0

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

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

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

4

2 回答 2

0

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

于 2012-07-11T21:05:08.117 回答
0

这个问题有点老了,但希望我的回答能对那些在谷歌搜索时发现这个问题的人有所帮助。我遇到了同样的问题,根本原因是在与目标服务器进行 smtp 交换期间,您必须使用“MAIL FROM:”。根据 MA​​IL 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,
);
于 2015-06-02T05:58:15.253 回答