2016-04-09 5 views
0

Я пытаюсь отправить электронное письмо обратно отправителю с помощью sendmail -oi -t, но каким-то образом он извлек MTA, как написать квитанцию, чтобы получить настоящего отправителя с момента возврата электронной почты и first From в заголовке электронной почты MTA, а не реальный отправитель? Так Sendmail может доставить почту обратно: Sender: [email protected] или С: [email protected]Как написать рецепт, чтобы получить настоящего отправителя электронной почты

Вот procmail.log и электронная почта получила:

... 
procmail: Matched "[email protected]" 
procmail: Match on "^Sender: \/.+" 
procmail: Assigning "LASTFOLDER= (/usr/bin/formail -rA"Precedence: junk" \ 
-A"X-Loop:[email protected]" \ 
-I"To: $MATCH"; \ 
echo "$result"; \ 
) | /usr/sbin/sendmail -oi -t" 
procmail: Assigning "PATH=/home/r/bin:/usr/local/bin:/usr/bin:/bin" 
procmail: Unable to treat as directory "/var/mail/new" 
procmail: Skipped "/var/mail" 
procmail: Assigning "LASTFOLDER=/var/mail/r" 
procmail: Executing " (/usr/bin/formail -rA"Precedence: junk" \ 
-A"X-Loop:addr2mydomain.com" \ 
-I"To: $MATCH"; \ 
echo "$result"; \ 
) | /usr/sbin/sendmail -oi -t" 
procmail: Opening "/var/mail/r" 
procmail: Acquiring kernel-lock 
procmail: Notified comsat: "[email protected]:/var/mail/r" 
From btv1==909280b6006==+1xxxxxxxxxx/[email protected] Mon Apr 11 17:09:24 2016 
Folder: /var/mail/r    

Вот электронный заголовок:

From btv1==9062f44d095==+xxxxxxxxxx/[email protected] Fri Apr 8 00:19:01 2016 
Return-Path: <btv1==9062f44d095==+xxxxxxxxxx/[email protected]> 
X-Original-To: [email protected] 
Delivered-To: [email protected] 
Received: from ch3p-tmo-mm3-sfw004.syniverse.com (chi-tmo-mm3.syniverse.com [x.x.x.x]) 
    by mail.mydomain.com (Postfix) with ESMTP id 7D444222D0 
    for <[email protected]>; Fri, 8 Apr 2016 00:19:01 +0000 (UTC) 
Received: from tmobile.net ([10.166.3.161]) by ch3p-tmo-mm3-  sfw004.syniverse.com with ESMTP id RuIW8dEKbs9H2Iyg for <[email protected]>; Fri, 08 Apr 2016 00:18:58 +0000 (GMT) 
To: [email protected] 
From: [email protected] 
Content-Type: multipart/related;Type="text/html";boundary="-boundaryRMS123" 
Date: Fri, 8 Apr 2016 00:18:58 GMT 
Message-ID: [email protected] 
Sender: [email protected] 
User-Agent: iPhoneOS/9.2.1 (13D15) 
X-Virus-Scanned: by bsmtpd at syniverse.com 

Вот последняя часть рецепта:

:0hc 
* !^X-Loop:[email protected] 
* ^Sender: \/.+ 
| (/usr/bin/formail -rA"Precedence: junk" \ 
        -A"X-Loop:[email protected]" ; \ 
    echo "$result"; \ 
) | /usr/sbin/sendmail -oi -t 

ответ

1

Вы даете команду formail генерировать ответ, и он будет точно попытаться сделать это. По умолчанию опция -r пытается выбрать лучший из списка приоритетов заголовков ; если сообщение имеет заголовок Reply-To: (но не Resent-From: и не Resent-Reply-To: и т. д.), он будет генерировать ответ на это.

С -rt вы получаете RFC-совместимое, но несколько менее прагматичное поведение, но здесь это действительно не помогает.

В любом случае, если вы точно знаете, на какой заголовок вы хотите ответить, просто используйте это.

:0hc 
* ! ^X-Loop:[email protected]\.com 
* ^Sender: \/.+ 
| (formail -rA"Precedence: junk" \ 
      -A"X-Loop:[email protected]" \ 
      -I"To: $MATCH"; \ 
    echo "$result"; \ 
) | /usr/sbin/sendmail -oi -t 

Это использует formail -r для того, чтобы получить правильные In-reply-to: и References: заголовок (как и все предыдущие X-Loop:), но переписывает сгенерированный To: заголовок с той, которую мы захватили из заголовка Sender:.

Значок \/ в регулярном выражении Procmail вызывает что-либо после его захвата в переменную MATCH. Мы используем это, чтобы захватить значение заголовка Sender: из входящего сообщения.


  1. http://www.iki.fi/era/procmail/formail.html - это от старой версии, но этот код не изменился в loooooong времени.
+0

Я добавил строку *^Отправитель: \ /.+ и -I "To: $ MATCH"; \, он говорит: procmail: Выполнение "(/ usr/bin/formail -rA" Приоритет: нежелательная "\ -A" X-Loop: [email protected] "; \ -I" To: $ MATCH "; \ " /bin/sh: 3: Синтаксическая ошибка: конец файла неожиданно (ожидается") ") –

+0

Какая строка *^Отправитель: \ /.+ делает, а $ MATCH является отправителем? Почему это внутри двойной кавычки? –

+0

Символ '\ /' в регулярном выражении Procmail вызывает что-либо после его захвата в переменную 'MATCH'. Обычно мы включаем двойные кавычки вокруг всех переменных, если мы специально не требуем, чтобы оболочка выполняла разделение токена и расширение подстановки для значения; см. http://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-variable – tripleee