Changer l'adresse «De:» dans le «courrier» Unix

88

Envoi d'un message à partir de la ligne de commande Unix à l'aide des mail TO_ADDRrésultats dans un e-mail de $USER@$HOSTNAME. Existe-t-il un moyen de modifier l'adresse «De:» insérée par mail?

Pour mémoire, j'utilise GNU Mailutils 1.1 / 1.2 sur Ubuntu (mais j'ai vu le même comportement avec Fedora et RHEL).

[ÉDITER]

$ mail -s Test [email protected]                                                                  
Cc: 
De: [email protected]

Essai
.

rendements

Objet: Test
À: <[email protected]>
X-Mailer: courrier (GNU Mailutils 1.1)
Message-Id: <E1KdTJj-00025z-RK @ localhost>
De: <chris @ localhost>
Date: mer 10 septembre 2008 13:17:23 -0400

De: [email protected]

Essai

La ligne «From: [email protected]» fait partie du corps du message, pas de l'en-tête.

Chris Conway
la source
1
De quelle saveur d'Unix s'agit-il? et quelle version de courrier? Juste pour savoir où ça ne marche pas.
Vinko Vrsalovic
Hum, presque tous. Quiconque utilise mailx ou berkeley le verra de cette façon. Si vous souhaitez affecter l'en-tête, écrivez l'en-tête entier et envoyez directement avec rmail ou sendmail.
Thomas Kammeyer
Oh, mais, désolé, je lance GenToo.
Thomas Kammeyer
Pour mémoire, j'utilise mailx et l'exemple que Chris donne fonctionne. Ou est-ce ce que vous vouliez dire?
Vinko Vrsalovic
Vinko, quelle version d'UN * X utilisez-vous? Voulez-vous dire par «œuvres» que vous obtenez ses résultats ou que vous obtenez le comportement souhaité qui répondrait à son besoin? Cela dépend dans une certaine mesure de la façon dont la soumission de message fonctionne sur votre plate-forme et si le client ajoute une ligne vide avant le
Thomas Kammeyer

Réponses:

106

Dans ma version de mail (Debian Linux 4.0), les options suivantes fonctionnent pour contrôler les adresses source / réponse

  • le commutateur -a , pour des en-têtes supplémentaires à appliquer, en fournissant un en-tête From: sur la ligne de commande qui sera ajouté à l'en-tête du courrier sortant
  • la variable d'environnement $ REPLYTO spécifie un en-tête Reply-To:

donc la séquence suivante

export [email protected]
mail -aFrom:[email protected] -s 'Testing'

Le résultat, dans mes clients de messagerie, est un e-mail de [email protected], auquel toutes les réponses seront par défaut [email protected]

NB: utilisateurs Mac OS: vous n'avez pas -a, mais vous avez $ REPLYTO

NB (2): les utilisateurs de CentOS, de nombreux commentateurs ont ajouté que vous devez utiliser -rnon-a

NB (3): Cette réponse date d'au moins dix ans (1), veuillez garder cela à l'esprit lorsque vous venez de Google.

cms
la source
Je viens de le tester à nouveau ici pour m'en assurer, et cela fonctionne bien pour moi. Tous les clients de messagerie ne fonctionnent pas bien avec Reply-To, mais j'aurais pensé que c'était un problème résolu maintenant. La variable d'environnement REPLYTO est mentionnée dans la page de manuel, d'autres expéditeurs UNIX l'honorent, emacs etc. Pourtant, je suppose que vous avez un correctif.
cms
Je ne pense pas que ce soit le client de messagerie ... Je ne vois pas l'en-tête Reply-To dans le texte brut du message. Mais oui, -a est suffisant.
Chris Conway
1
Non, ce n'est pas le cas. Mais: "Le manuel GNU mailutils complet n'est pas disponible dans les systèmes Debian pour des raisons de licence." -aReply-To: ... fonctionne.
Chris Conway
Je ne vois pas non plus de mention de REPLYTO sur gnu.org/software/mailutils/manual/mailutils.html
Chris Conway
4
dans CentOS, l' mail -aoption signifie "attachemnet". J'avais besoin d'utiliser -rcommemail -r [email protected]
équivalent8
42

Sur Centos 5.3, je suis capable de faire:

mail -s "Subject" [email protected] -- -f [email protected] < body

Le double tiret empêche le courrier d'analyser l'argument -f et le transmet à sendmail lui-même.

Beau
la source
3
ne marche pas. 3 adresses sont ajoutées à l'adresse maintenant. l'adresse à, l'adresse f et le domaine local
shorif2000
2
Pouvez-vous aider, cela fonctionnait - mais, depuis une mise à jour récente, cela ne fonctionne plus, il essaie simplement d'envoyer un e-mail à -f @ hostname
Wil
1
Ne fonctionne pas sur CentOS 6.3. Essayez la réponse @ ubuntu-fanboy ci-dessous en utilisant l'indicateur -r.
skytaker
26

La commande 'mail' de GNU mailutils ne vous permet pas de faire cela (du moins facilement). Mais si vous installez 'heirloom-mailx', sa commande mail (mailx) a l'option '-r' pour remplacer la valeur par défaut '$ USER @ $ HOSTNAME' du champ.

echo "Hello there" | mail -s "testing" -r [email protected] [email protected]

Fonctionne pour «mailx» mais pas pour «mail».

$ ls -l / usr / bin / mail
lrwxrwxrwx 1 racine racine 22 23/12/2010 08:33 / usr / bin / mail -> / etc / alternatives / mail
$ ls -l / etc / alternatives / mail
lrwxrwxrwx 1 racine racine 23 23/12/2010 08:33 / etc / alternatives / mail -> / usr / bin / heirloom-mailx
ubuntu-fanboy
la source
5
Peut-être pourrait-il être utile de savoir que la mailcommande GNU mailutils préinstallée sur Ubuntu 14.04 LTS prend en charge l' -roption, afin que vous puissiez facilement définir l'adresse de l'expéditeur.
gerlos
J'avais testé sur Debian 9.11, et l'option fonctionne également.
Fedir RYKHTIK
14
mail -s "$(echo -e "This is the subject\nFrom: Paula <[email protected]>\n
Reply-to: [email protected]\nContent-Type: text/html\n")" 
[email protected] < htmlFileMessage.txt

ce qui précède est ma solution .... tous les en-têtes supplémentaires peuvent être ajoutés juste après le from et avant la réponse à ... assurez-vous simplement de connaître la syntaxe de vos en-têtes avant de les ajouter .... cela a parfaitement fonctionné pour moi.

Mousse
la source
1
Cela fonctionne pour moi avec votre exemple ... Lorsque je change le sujet de l'adresse e-mail, etc., tous les en-têtes sont-ils affichés?
bsmoo
7

De plus, c'est bon à utiliser -F option pour spécifier le nom de l'expéditeur.

Quelque chose comme ça:

mail -s "$SUBJECT" $MAILTO -- -F $MAILFROM -f ${MAILFROM}@somedomain.com

Ou regardez simplement les options disponibles: http://www.courier-mta.org/sendmail.html

Artickl
la source
5

Il est également possible de définir à la fois le nom de l'expéditeur et l'adresse de l'expéditeur en utilisant quelque chose comme:

 echo test | mail -s "test" [email protected] -- -F'Some Name<[email protected]>' -t

Pour une raison quelconque, passer -F'Some Name'et [email protected]ne fonctionne pas, mais passer le -tà sendmail fonctionne et est "facile".

Alcanzar
la source
4

Voici quelques options:

  • Si vous avez suffisamment de privilèges, configurez sendmail pour faire des réécritures avec la table des génériques

  • Écrivez vous-même l'en-tête entier (ou envoyez-le par courrier électronique, enregistrez le message entier avec tous les en-têtes, rééditez-le et envoyez-le avec rmail depuis la ligne de commande

  • Envoyez directement avec sendmail, utilisez l'indicateur de ligne de commande "-f" et n'incluez pas votre ligne "De:" dans votre message

Ce ne sont pas tous exactement les mêmes, mais je vous laisse le soin d'examiner plus en détail.

Sur mon portable, j'ai sendmail qui s'authentifie en tant que client sur un serveur de messagerie sortant et j'utilise des génériques pour faire revenir le courrier vers un autre compte. Il fonctionne comme un charme. J'agrège le courrier entrant avec fetchmail.

Thomas Kammeyer
la source
4

J'ai dérivé cela de toutes les réponses ci-dessus. Rien n'a fonctionné pour moi quand j'ai essayé chacun d'eux. J'ai fait beaucoup de sentiers et d'erreurs en combinant toutes les réponses ci-dessus et en concluant à ce sujet. Je ne sais pas si cela fonctionne pour vous, mais cela a fonctionné pour moi sur Ununtu 12.04 et RHEL 5.4.

echo "This is the body of the mail" | mail -s 'This is the subject' '<[email protected]>,<[email protected]>' -- -F '<SenderName>' -f '<[email protected]>'

On peut envoyer le courrier à n'importe quel nombre de personnes en ajoutant n'importe quel nombre d'identifiants de destinataire et le courrier est envoyé par SenderName de [email protected]

J'espère que cela t'aides.

optimus0127
la source
cela ne fonctionne pas pour / usr / bin / mail, peut-être que votre commande est pour sendmail.
basZero
3

Je ne sais pas si c'est la même chose avec d'autres OS, mais dans OpenBSD, la commande mail a cette syntaxe:

mail to-addr ... -sendmail-options ...

sendmail a l'option -f où vous indiquez l'adresse e-mail pour le champ FROM :. La commande suivante fonctionne pour moi.

mail [email protected] -f [email protected]
Ryan Barong
la source
Travaille pour moi! (Aussi openBSD - Macbook pro.)
Aeonaut
1
Mise à jour - le destinataire de l'e-mail voit toujours mon nom de compte local avant [email protected]- par exemple, "Aeonaut [email protected]". Une idée de comment changer cela?
Aeonaut
3
Ça ne marche pas pour moi. (os x mountain lion) "mail: Impossible de donner -f et les personnes à envoyer."
Jonny
3

Merci BEAU

mail -s "Subject" [email protected] -- -f [email protected]

Je viens de trouver ça et ça marche pour moi. Les pages de manuel de mail 8.1 sur CentOS 5 ne le mentionnent pas. Pour-f option, la page de manuel dit:

-f Lire les messages à partir du fichier nommé par l'opérande de fichier au lieu de la boîte aux lettres système. (Voir aussi dossier.) Si aucun opérande de fichier n'est spécifié, lisez les messages de mbox au lieu de la boîte aux lettres système.

Donc de toute façon c'est génial à trouver, merci.

gbla
la source
1
-fn'est bien entendu pas une option pour mailvotre exemple, car il est précédé de --. Cette option est remise à votre MTA
Anthon
3

Sur Debian 7, je n'étais toujours pas en mesure de définir correctement l'adresse de l'expéditeur en utilisant les réponses à cette question (ce serait toujours le nom d'hôte du serveur) mais je l'ai résolu de cette façon.

Installez heirloom-mailx

apt-get install heirloom-mailx

assurez-vous que c'est la valeur par défaut.

update-alternatives --config mailx

Rédigez un message.

mail -s "Testing from & replyto" -r "sender <[email protected]>" -S replyto="[email protected]" [email protected] < <(echo "Test message")
gelée
la source
Que fait cette update-alternativescommande? Cela me donne 3 choix et je suis perplexe.
Stephane
1

Sur CentOS, cela a fonctionné pour moi:

echo "email body" | mail -s "Subject here" -r from_email_address email_address_to
Céline Aussourd
la source
1

echo "body" | mail -S [email protected] "Hello"

-S vous permet de spécifier de nombreuses options de chaîne, de loin le moyen le plus simple de modifier les en-têtes et autres.

André Backeby
la source
0

Sur CentOS 5.5, le moyen le plus simple que j'ai trouvé pour définir la valeur par défaut du domaine est de modifier le fichier d'hôtes. Si votre fichier hosts contient votre adresse WAN / IP publique, modifiez simplement le premier nom d'hôte répertorié pour celui-ci. Par exemple, votre fichier hosts peut ressembler à:

... par
défaut domaine 11.22.33.44 localhost whatever-else.com
...

Pour le faire envoyer depuis n'importe quel-else.com, modifiez-le simplement afin que n'importe quel-else.com soit répertorié en premier, par exemple:

...
11.22.33.44 quel que soit-else.com localhost domaine par défaut
...

Je ne peux parler pour aucune autre distribution (ou même version de CentOS) mais dans mon cas particulier, ce qui précède fonctionne parfaitement.

papsy
la source
0

Ce qui m'a permis d'avoir une adresse de réponse personnalisée sur un Ubuntu 16.04avecUTF-8 encodage et une pièce jointe:

Installez le client de messagerie:

sudo apt-get install heirloom-mailx

Modifiez la configuration SMTP:

sudo vim /etc/ssmtp/ssmtp.conf
mailhub=smtp.gmail.com:587
FromLineOverride=YES
[email protected]
AuthPass=???
UseSTARTTLS=YES

Envoyez le mail:

sender='[email protected]'
recipient='[email protected]'
zipfile="results/file.zip"
today=`date +\%d-\%m-\%Y`
mailSubject='My subject on the '$today
read -r -d '' mailBody << EOM
Find attached the zip file.

Regards,
EOM
mail -s "$mailSubject" -r "Name <$sender>" -S replyto="$sender" -a $zipfile $recipient < <(echo $mailBody)
Stéphane
la source
0

Aucune des solutions ci-dessus ne fonctionne pour moi ...

#!/bin/bash

# Message
echo "My message" > message.txt

# Mail
subject="Test"
mail_header="From: John Smith <[email protected]>"
recipients="[email protected]"

#######################################################################
cat message.txt | mail -s "$subject" -a "$mail_header" -t "$recipients"
JazzCat
la source