Comment définir l'adresse e-mail pour la commande mailx?
Question
Je travaille sur un scénario KornShell (ksh) en cours d'exécution sur un serveur Solaris qui enverra un e-mail quand et condition d'erreur est remplie. J'envoie l'e-mail via mailx
.
Question: Comment puis-je configurer l'adresse e-mail "From" sur la commande mailx
Code actuel:
echo ${msg_txt} | mailx -s "Script Failure" ${to_email}
Remarque:. La commande fonctionne très bien, cependant, la « From » est le nom de l'utilisateur que je suis en cours d'exécution du script et je voudrais pour cela à une autre adresse e-mail
Comment pourrais-je accomplir cela?
La solution
Vous pouvez utiliser l'option "-r" pour définir l'adresse de l'expéditeur:
mailx -r me@example.com -s ...
Autres conseils
L'option « -r » est invalide sur mes systèmes. Je devais utiliser une syntaxe différente pour le champ « From ».
-a "From: Foo Bar <foo.bar@someplace.com>"
Si vous voulez également inclure dans votre vrai nom dans le champ de, vous pouvez utiliser le format suivant
mailx -r "me@example.com (My Name)" -s "My Subject" ...
Si vous arrive d'avoir des caractères non-ASCII en votre nom, comme My AEÆoeøaaå (Æ = C3 86, ø = C3 B8, å = C3 A5), vous devez les coder comme ceci:
mailx -r "me@example.com (My =?utf-8?Q?AE=C3=86oe=C3=B8aa=C3=A5?=)" -s "My Subject" ...
Espérons que cela peut sauver quelqu'un d'une heure de travail / recherche!
Sur debian où bsd-mailx
est installé par défaut, l'option -r
ne fonctionne pas. Cependant, vous pouvez utiliser mailx -s subject recipient@abc.com -- -f sender@abc.com
à la place. Selon la page de manuel, vous pouvez spécifier des options sendmail après --
.
Le nail
paquet fournit un mailx amélioré comme interface. Il inclut l'option -r
.
Centos 5 installer le paquet mailx
vous donne un programme appelé mail
, qui ne prend pas en charge les options de mailx
.
Je viens de croiser ce problème de syntaxe sur une machine CentOS 7.
Sur un très vieux mail
machine en marche Ubuntu, la syntaxe pour un e-mail bien composé est
echo -e "$body" | mail -s "$subject" -a "From: Sender Name <$sender>" "$recipient"
Cependant sur une boîte CentOS 7 qui est venu avec mailx
installé, il est tout à fait différent:
echo -e "$body" | mail -s "$subject" -S "from=Sender Name <$sender>" "$recipient"
Activité de conseil man mail
indique que -r
est dépréciée et « De » adresse de l'expéditeur doit maintenant être réglé directement à l'aide -S "variable=value"
.
Dans les exemples suivants et ces, je définis comme
$sender
"Sender Name <sender.address@domain.tld>"
et$recipients
comme"recipient.name@domain.tld"
comme je le fais dans mon script bash.
Vous pouvez alors trouver, comme je l'ai fait, que lorsque vous essayez de générer le contenu du corps de l'e-mail dans votre script au point d'envoyer l'e-mail, vous rencontrez un comportement étrange où le corps du message est plutôt attaché comme un fichier binaire ( "ATT00001.bin", "application / octet-stream" ou "noname", selon le client).
Ce comportement est de savoir comment gère Heirloom mailx caractères non reconnus / contrôle dans la saisie de texte. (Plus d'info: https://access.redhat.com/solutions/1136493 , qui lui-même références à la page man mailx pour la solution.)
Pour contourner ce problème, j'ai utilisé une méthode qui canalise la sortie générée par tr
avant de passer à mail
, et précise également le jeu de caractères de l'e-mail:
echo -e "$body" | tr -d \\r | mail -s "$subject" -S "from=$sender" -S "sendcharsets=utf-8,iso-8859-1" "$recipients"
Dans mon script, je suis aussi delaring explicitement les paramètres régionaux au préalable comme il est exécuté comme une tâche cron (et ne Cron hérite pas des variables d'environnement):
LANG="en_GB.UTF8" ; export LANG ;
(Un autre procédé de réglage de paramètres régionaux href="//unix.stackexchange.com/a/89596/15460"> cronjobs )
En savoir plus sur ces solutions de contournement via https://stackoverflow.com/a/29826988/253139 et https://stackoverflow.com/a/3120227/253139 .
macOS Sierra Sur, en créant ~ / .mailrc avec la configuration de smtp a fait l'affaire:
set smtp-use-starttls
set smtp=smtp://smtp.gmail.com:587
set smtp-auth=login
set smtp-auth-user=youremail@gmail.com
set smtp-auth-password=yourpass
Alors pour envoyer du courrier de CLI:
echo "your message" | mail -s "your subject" to_email@gmail.com
Sur Ubuntu Bionic 18,04, cela fonctionne comme vous le souhaitez:
$ echo -e "testing email via yourisp.com from command line\n\nsent on: $(date)" | mailx --append='FROM:Foghorn Leghorn <fleghorn@yourisp.com>' -s "test cli email $(date)" -- recipient@acme.com