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 chris@example.org                                                                  
Cc: 
De: foo@bar.org

Essai
.

rendements

Objet: Test
À: <chris@example.org>
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: foo@bar.org

Essai

La ligne «From: foo@bar.org» fait partie du corps du message, pas de l'en-tête.


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 REPLYTO=cms-replies@example.com
mail -aFrom:cms-sends@example.com -s 'Testing'

Le résultat, dans mes clients de messagerie, est un e-mail de cms-sends@example.com, auquel toutes les réponses seront par défaut cms-replies@example.com

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.


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 from@whatever.com
équivalent8

42

Sur Centos 5.3, je suis capable de faire:

mail -s "Subject" user@address.com -- -f from@address.com < body

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


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 sender@company.com recipient@company.com

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

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 <johny@paula.com>\n
Reply-to: 1232564@yourserver.com\nContent-Type: text/html\n")" 
milas.josh@gmail.com < 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.


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


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" example@example.com -- -F'Some Name<example2@example.com>' -t

Pour une raison quelconque, passer -F'Some Name'et -fexample2@example.comne fonctionne pas, mais passer le -tà sendmail fonctionne et est "facile".


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.


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' '<receiver-id1@email.com>,<receiver-id2@email.com>' -- -F '<SenderName>' -f '<from-id@email.com>'

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 from-id@email.com

J'espère que cela t'aides.


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 recepient@example.com -f from@example.com

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 from@example.com- par exemple, "Aeonaut from@example.com". 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" user@address.com -- -f from@address.com

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.


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 <sender@example.com>" -S replyto="sender@example.com" recipient@example.net < <(echo "Test message")

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

1

echo "body" | mail -S from=address@foo.com "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.


1

echo "test" | mailx -r fake@example.com -s 'test' email@example.com

Cela fonctionne dans OpenBSD.


0

cela a fonctionné pour moi

echo "hi root"|mail -rsawrub@testingdomain.org -s'testinggg' root

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.


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
AuthUser=???@gmail.com
AuthPass=???
UseSTARTTLS=YES

Envoyez le mail:

sender='send@domain.com'
recipient='recipient@domain.com'
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)

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 <john.smith@example.com>"
recipients="recipient@example.com"

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

-1

Les réponses fournies auparavant ne fonctionnaient pas pour moi sur CentOS5. J'ai installé mutt. Il y a beaucoup d'options. Avec mutt, vous procédez comme suit:

export EMAIL=myfrom@example.com
export REPLYTO=myreplyto@example.com
mutt -s Testing chris@example.org
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.