VERP и Perl Postfix не работает

Итак, у меня есть скрипт, на котором я пытаюсь правильно запустить 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 ответа

Вопрос немного старый, но, надеюсь, мой ответ поможет кому-то, кто найдет это, пока гуглит. У меня была такая же проблема, и основная причина в том, что вы должны использовать "MAIL FROM: " во время обмена smtp с целевым сервером. Задание пути возврата в заголовке MIME::Header перезаписывается самим сервером smtp точно на основе команды smilp MAIL FROM. Таким образом, у вас может быть почтовый конверт, содержащий 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,
);

Return-Path не является правильным местом для адреса VERP, и будет игнорироваться и / или переопределяться. Вы должны поместить это как фактическое, честное $dmr, реальный отправитель SMTP-конверта (MAIL FROM:<>) адрес.

Другие вопросы по тегам