2016-04-09 4 views
0

Je suis en train d'envoyer un e-mail à l'expéditeur en utilisant sendmail -oi -t, mais en quelque sorte, il extrait MTA, comment écrire le reçu pour obtenir l'expéditeur réel depuis le chemin de retour de messagerie et D'abord dans l'en-tête de l'email est MTA, pas le vrai expéditeur? Alors sendmail peut remettre le courrier électronique Retour à: Auteur: [email protected] ou De: [email protected]Comment écrire une recette pour obtenir l'expéditeur de l'email réel

Voici le procmail.log et le courrier électronique reçu:

... 
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    

Voici la en-tête de courrier électronique:

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 

Voici la dernière partie de la recette:

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

Répondre

1

Vous donnez instruction à formail de générer une réponse et il tentera fidèlement de le faire. Par défaut, l'option -r essaie de sélectionner la meilleure liste d'en-têtes d'une liste de priorité ; si le message a un en-tête Reply-To: (mais pas de Resent-From:, et pas de Resent-Reply-To:, etc.), il génèrera une réponse à cela.

Avec -rt, vous obtenez un comportement conforme à la norme RFC mais un peu moins pragmatique, mais cela ne vous aide pas vraiment ici. Quoi qu'il en soit, si vous savez exactement à quel en-tête vous voulez répondre, il suffit de l'utiliser.

: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 

Il utilise formail -r afin d'obtenir et de corriger In-reply-to:References: en-têtes (ainsi que tout X-Loop: précédent), mais l'en-tête To: écrase généré avec celui que nous prîmes de l'en-tête Sender:.

Le jeton \/ dans une expression régulière Procmail entraîne la capture de tout ce qui suit dans la variable MATCH. Nous utilisons ceci pour récupérer la valeur de l'en-tête Sender: du message entrant.


  1. http://www.iki.fi/era/procmail/formail.html - ceci est d'une version plus ancienne, mais ce code n'a pas changé en un temps loooooong.
+0

J'ai ajouté la ligne *^Sender: \ /.+ et -I "To: $ MATCH"; \, il dit: procmail: Exécution "(/ usr/bin/formail -rA" Préséance: indésirable "\ -A" X-Loop: [email protected] "; \ -I" À: $ MATCH "; \ " /bin/sh: 3: Erreur de syntaxe: fin du fichier inattendu (attendez") ") –

+0

Quelle ligne *^Sender: \ /.+ fait et le $ MATCH est l'expéditeur? Pourquoi c'est dans la double citation? –

+0

Le jeton '\ /' dans une expression régulière Procmail provoque la capture de tout ce qui suit dans la variable 'MATCH'. Nous plaçons généralement des guillemets doubles autour de toutes les variables sauf si nous demandons spécifiquement au shell d'effectuer le fractionnement de jetons et l'expansion générique sur la valeur; voir http://stackoverflow.com/questions/10067266/when-to-wrap-quotes-around-a-variable – tripleee