Come impostare l'indirizzo Da e-mail per il comando mailx?
Domanda
Sto lavorando su uno script KornShell (ksh) in esecuzione su un server Solaris che invierà una e-mail quando e condizione di errore è soddisfatta. Io mando l'e-mail tramite mailx
.
Domanda:? Come faccio a impostare il "Da" indirizzo di posta elettronica sul comando mailx
Codice attuale:
echo ${msg_txt} | mailx -s "Script Failure" ${to_email}
. Nota: Il comando funziona bene, però, il "Da" è il nome dell'utente sto facendo funzionare lo script come e vorrei per questo a un altro indirizzo e-mail
Come potrei fare questo?
Soluzione
È possibile utilizzare l'opzione "-r" per impostare l'indirizzo del mittente:
mailx -r me@example.com -s ...
Altri suggerimenti
L'opzione "-r" non è valido sui miei sistemi. Ho dovuto usare una sintassi diversa per il campo "Da".
-a "From: Foo Bar <foo.bar@someplace.com>"
Nel caso in cui anche voler includere il tuo vero nome nel da-campo, è possibile utilizzare il seguente formato
mailx -r "me@example.com (My Name)" -s "My Subject" ...
Se vi capita di avere caratteri non ASCII in voi nome, come mio AEÆoeøaaå (Æ = C3 86, ø = C3 B8, a = C3 A5), è necessario codificarli in questo modo:
mailx -r "me@example.com (My =?utf-8?Q?AE=C3=86oe=C3=B8aa=C3=A5?=)" -s "My Subject" ...
Spero che questo può salvare qualcuno un'ora di duro lavoro / ricerca!
Il debian dove bsd-mailx
è installato di default, l'opzione -r
non funziona. Tuttavia è possibile utilizzare invece mailx -s subject recipient@abc.com -- -f sender@abc.com
. Secondo la pagina man, è possibile specificare le opzioni di sendmail dopo --
.
Il nail
pacchetto fornisce una maggiore mailx come l'interfaccia. Esso include l'opzione -r
.
su CentOS 5 si installa il pacchetto mailx
dà un programma chiamato mail
, che non supporta le opzioni mailx
.
Proprio imbattuto in questo problema di sintassi su una macchina CentOS 7.
In una vecchia macchina Ubuntu mail
esecuzione, la sintassi per una e-mail ben composto è
echo -e "$body" | mail -s "$subject" -a "From: Sender Name <$sender>" "$recipient"
Tuttavia su una scatola di CentOS 7 che è venuto con mailx
installato, è ben diversa:
echo -e "$body" | mail -s "$subject" -S "from=Sender Name <$sender>" "$recipient"
Consulenza man mail
indica che -r
è deprecato e il 'Da' indirizzo del mittente dovrebbe ora essere impostata direttamente utilizzando -S "variable=value"
.
In questi esempi e successive, sto definendo
$sender
come"Sender Name <sender.address@domain.tld>"
e$recipients
come"recipient.name@domain.tld"
come faccio io nel mio script bash.
Si può quindi trovare, come ho fatto io, che quando si tenta di generare contenuto del corpo dell'e-mail nello script al punto di inviare l'e-mail, si incontra uno strano comportamento in cui il corpo e-mail è invece allegato come un file binario ( "ATT00001.bin", "application / octet-stream" o "noname", a seconda del cliente).
Questo comportamento è il modo Heirloom mailx gestisce caratteri non riconosciuti / controllo in inserimento del testo. (Per saperne di più: https://access.redhat.com/solutions/1136493 , che si fa riferimento la pagina man mailx per la soluzione.)
Per aggirare il problema, ho usato un metodo che i tubi l'output generato attraverso tr
prima di passare alla mail
, e specifica anche il set di caratteri della e-mail:
echo -e "$body" | tr -d \\r | mail -s "$subject" -S "from=$sender" -S "sendcharsets=utf-8,iso-8859-1" "$recipients"
Nel mio script, sto anche delaring esplicitamente il locale in anticipo, come è gestito come un cronjob (e cron non eredita variabili ambientali):
LANG="en_GB.UTF8" ; export LANG ;
(Un metodo alternativo di regolazione locali per cronjobs è discusso qui )
Più informazioni su queste soluzioni alternative tramite https://stackoverflow.com/a/29826988/253139 e https://stackoverflow.com/a/3120227/253139 .
su MacOS Sierra, creando ~ / .mailrc con l'installazione smtp ha fatto il trucco:
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
Poi, per inviare la posta da CLI:
echo "your message" | mail -s "your subject" to_email@gmail.com
Su Ubuntu 18.04 Bionic, questo funziona, se lo desideri:
$ 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