Ich arbeite an einem KornShell (ksh) -Skript, das auf einem Solaris-Server ausgeführt wird und eine E-Mail sendet, wenn die Fehlerbedingung erfüllt ist. Ich versende die E-Mail über mailx.
Frage: Wie lege ich die E-Mail-Adresse "Von" im Befehl mailx fest?
Aktueller Code:
echo ${msg_txt} | mailx -s "Script Failure" ${to_email}
Hinweis: Der Befehl funktioniert gut, das "Von" ist jedoch der Name des Benutzers, unter dem das Skript ausgeführt wird, und ich möchte dafür an eine andere E-Mail-Adresse.
Wie würde ich das schaffen?
Sie können die "-r" -Option verwenden, um die Absenderadresse einzustellen:
mailx -r [email protected] -s ...
Die Option "-r" ist auf meinen Systemen ungültig. Ich musste eine andere Syntax für das Feld "Von" verwenden.
-a "From: Foo Bar <[email protected]>"
Wenn Sie auch Ihren echten Namen in das from-Feld aufnehmen möchten, können Sie das folgende Format verwenden
mailx -r "[email protected] (My Name)" -s "My Subject" ...
Wenn Sie nicht-ASCII-Zeichen in Ihrem Namen enthalten, wie z. B. Mein AEÆoeøaaå (Æ = C3 86, ø = C3 B8, å = C3 A5), müssen Sie diese wie folgt codieren:
mailx -r "[email protected] (My =?utf-8?Q?AE=C3=86oe=C3=B8aa=C3=A5?=)" -s "My Subject" ...
Hoffe, das kann jemandem eine Stunde harte Arbeit/Forschung ersparen!
Auf Debian, wo bsd-mailx
standardmäßig installiert ist, funktioniert die -r
-Option nicht. Sie können jedoch stattdessen mailx -s subject [email protected] -- -f [email protected]
verwenden. Entsprechend der Manpage können Sie sendmail-Optionen nach --
angeben.
Das Paket nail
bietet eine erweiterte Mailx-ähnliche Schnittstelle. Es enthält die Option -r
.
Bei der Installation des Pakets mailx
erhalten Sie ein Programm namens mail
, das die Optionen mailx
nicht unterstützt.
Auf Ubuntu Bionic 18.04 funktioniert dies wie gewünscht:
$ echo -e "testing email via yourisp.com from command line\n\nsent on: $(date)" | mailx --append='FROM:Foghorn Leghorn <[email protected]>' -s "test cli email $(date)" -- [email protected]
Dieses Syntaxproblem stieß gerade auf einem CentOS 7-Rechner.
Auf einer sehr alten Ubuntu-Maschine, die mail
ausführt, lautet die Syntax für eine gut verfasste E-Mail
echo -e "$body" | mail -s "$subject" -a "From: Sender Name <$sender>" "$recipient"
Bei einer CentOS 7-Box, die mit mailx
installiert wurde, ist dies jedoch etwas anderes:
echo -e "$body" | mail -s "$subject" -S "from=Sender Name <$sender>" "$recipient"
Beratung man mail
zeigt an, dass -r
veraltet ist und die Absenderadresse von 'Abs' jetzt direkt mit -S "variable=value"
festgelegt werden sollte.
In diesen und den folgenden Beispielen definiere ich
$sender
als"Sender Name <[email protected]>"
und$recipients
als"[email protected]"
wie in meinem Bash-Skript.
Wenn Sie versuchen, den Inhalt der E-Mail in Ihrem Skript zum Zeitpunkt des Versendens der E-Mail zu generieren, kann es passieren, dass Sie ein seltsames Verhalten feststellen, bei dem der E-Mail-Text stattdessen als Binärdatei angehängt wird ("ATT00001"). bin "," application/octet-stream "oder" noname "(abhängig vom Client).
Mit diesem Verhalten behandelt Heirloom mailx nicht erkannte/Steuerzeichen in der Texteingabe. (Weitere Informationen: https://access.redhat.com/solutions/1136493 verweist auf die mailx-Manpage für die Lösung.)
Um dies zu umgehen, habe ich eine Methode verwendet, die die generierte Ausgabe durch tr
leitet, bevor sie an mail
übergeben wird. Außerdem wird der Zeichensatz der E-Mail angegeben:
echo -e "$body" | tr -d \\r | mail -s "$subject" -S "from=$sender" -S "sendcharsets=utf-8,iso-8859-1" "$recipients"
In meinem Skript lösche ich auch explizit das Gebietsschema vorher, da es als Cronjob ausgeführt wird (und Cron erbt keine Umgebungsvariablen):
LANG="en_GB.UTF8" ; export LANG ;
(Eine alternative Methode zum Festlegen von Gebietsschemas für Cronjobs wird hier diskutiert.)
Weitere Informationen zu diesen Problemumgehungen finden Sie unter https://stackoverflow.com/a/29826988/253139 und https://stackoverflow.com/a/3120227/253139 .
Unter macOS Sierra hat das Erstellen von ~/.mailrc mit dem SMTP-Setup den Trick:
set smtp-use-starttls
set smtp=smtp://smtp.gmail.com:587
set smtp-auth=login
set [email protected]
set smtp-auth-password=yourpass
Dann senden Sie eine Mail von der CLI:
echo "your message" | mail -s "your subject" [email protected]