Ich habe einen Cron-Befehl, der eine Datei ausführt, und ich versuche, die Ausgabe so einzurichten, dass sie mir eine E-Mail sendet. Ich verwende dies mit Skripten von Drittanbietern, bei denen ich die direkten Dateien nicht ändern möchte. Daher muss ich die Ausgabe weiterleiten, anstatt das PHP zu ändern.
Ich migriere von einem Server, der verwendet, mail
zu einem Server, der verwendet sendmail
. Ich habe Probleme herauszufinden, wie ein Betreff über eine Befehlszeile ordnungsgemäß an sendmail gesendet werden kann.
/usr/local/bin/php -f /path/to/file.php 2>&1 | /usr/sbin/sendmail -s "My Test Email Subject" [email protected]
sendmail
ist die Binärdatei, die von Ihrem System verwendet wird, um E-Mails weiterzuleiten, die von an gesendet werdenmail
. Es ist Teil einer Reihe von Programmen wie sendmail , postfix , exim und so weiter. Sie müssen also das entsprechende Paket für Mail installieren . Teilen Sie uns also die von Ihnen verwendete Linux-Distribution mit.Antworten:
Das ist falsch.
Sie sollten einen
mail
Befehl haben, wo. Es könnte genannt werdenmailx
. Sollte im/bin/
Verzeichnis sein. In der Regel sollten PHP-Skripte niemals etwas in/sbin
oder aufrufen/usr/sbin
. Die sbin-Programme sind normalerweise für root.Außerdem verfügt PHP über eine integrierte Mail-Funktion .
quelle
mail
odermailx
sein kannMail
. Aber selbst wenn diese nicht existieren, können Sie mutt installieren und ausführen,mutt -x
was emuliertmailx
.which mail
und er kehrte zurück/bin/mail
.Wenn ich auf meinen Debian-Systemen (die Exim anstelle von "echtem" sendmail haben, aber aus Kompatibilitätsgründen immer noch eine sendmail-Binärdatei haben) E-Mails von einem Skript aus senden möchte, mache ich etwas, das dem entspricht:
Beachten Sie, dass die leere Zeile wichtig ist.
quelle
sendmail -t <<EOF
?sendmail
fehlschlagen und in STDERR schreiben würde, wie könnte ich dies als Variable erfassen, die später im Skript verwendet werden soll?echo = Der Text der E-Mail.
sed stuff = Wendet die E-Mail-Header und wichtige doppelte Zeilen zwischen Text und Headern an.
sendmail -t = Leitet es direkt über sendmail weiter.
quelle
quelle