0

我正在尝试使用 将电子邮件发回给发件人sendmail -oi -t,但它以某种方式提取了 MTA,如何编写收据以获取真正的发件人,因为电子邮件返回路径和电子邮件标头中的第一个 From 是 MTA,而不是真正的发件人?因此 sendmail 可以将电子邮件发送回: 发件人:+xxxxxxxxxx@tmomail.net 或发件人:+xxxxxxxxxx@tmomail.net

这是收到的 procmail.log 和电子邮件:

...
procmail: Matched "+1xxxxxxxxxx@tmomail.net"
procmail: Match on "^Sender: \/.+"
procmail: Assigning "LASTFOLDER= (/usr/bin/formail -rA"Precedence: junk" \
-A"X-Loop:addr@mydomain.com" \
-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: "r@884017:/var/mail/r"
From btv1==909280b6006==+1xxxxxxxxxx/TYPE=PLMN@tmomail.net  Mon Apr 11  17:09:24 2016
Folder: /var/mail/r             

这是电子邮件标题:

From btv1==9062f44d095==+xxxxxxxxxx/TYPE=PLMN@tmomail.net  Fri Apr  8 00:19:01 2016
Return-Path: <btv1==9062f44d095==+xxxxxxxxxx/TYPE=PLMN@tmomail.net>
X-Original-To: recipient@mydomain.com
Delivered-To: recipient@mydomain.com
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 <recipient@mydomain.com>; 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 <r@mr4.biz>; Fri, 08 Apr   2016 00:18:58 +0000 (GMT)
To: recipient@mydomain.com
From: +xxxxxxxxxx@tmomail.net
Content-Type: multipart/related;Type="text/html";boundary="-boundaryRMS123"
Date: Fri, 8 Apr 2016 00:18:58 GMT
Message-ID: 20160308001858639184@mavenir.com
Sender: +xxxxxxxxxx@tmomail.net
User-Agent: iPhoneOS/9.2.1 (13D15)
X-Virus-Scanned: by bsmtpd at syniverse.com

这是食谱的最后一部分:

:0hc
* !^X-Loop:old@domain.com
* ^Sender: \/.+
| (/usr/bin/formail -rA"Precedence: junk" \
                     -A"X-Loop:addr@mydomain.com" ; \
   echo "$result"; \
) | /usr/sbin/sendmail -oi -t
4

1 回答 1

1

您正在指示formail生成回复,它会忠实地尝试这样做。默认情况下,该-r选项会尝试从标题1的优先级列表中选择最佳的;如果消息有Reply-To:标题(但 noResent-From:和 noResent-Reply-To:等),它将生成对此的回复。

使用-rt,您将获得符合 RFC 但不太实用的行为,但在这里并没有真正的帮助。

无论如何,如果您确切知道要回复哪个标题,请使用它。

:0hc
* ! ^X-Loop:old@domain\.com
* ^Sender: \/.+
| ( formail -rA"Precedence: junk" \
             -A"X-Loop:r@mydomain.com" \
             -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 - 这是来自旧版本,但这段代码在很长一段时间内都没有改变。
于 2016-04-11T05:01:55.550 回答