web-dev-qa-db-ja.com

コマンドラインパイピングでsendmailを送信する方法

ファイルを実行するcronコマンドがあり、メールで送信されるように出力を設定しようとしています。ダイレクトファイルを変更したくないサードパーティのスクリプトでこれを使用しているため、PHPを変更する代わりに出力をパイプ処理する必要があります。

mailを使用するサーバーからsendmailを使用するサーバーに移行しています。コマンドラインから件名をsendmailに正しく送信する方法を見つけるのに苦労しています。

/usr/local/bin/php -f /path/to/file.php 2>&1 | /usr/sbin/sendmail -s "My Test Email Subject" [email protected]
9
Webnet

/ usr/sbin/sendmail

それは間違っている。

どこかにmailコマンドが必要です。 mailxと呼ぶことができます。 /bin/ディレクトリ。標準的な方法として、PHPスクリプトは/sbinまたは/usr/sbin。 sbinプログラムは通常、root用です。

また、phpには組み込みの メール関数 があります。

3
ablackhat

私のDebianシステム( "本物の" sendmailではなくEximを持っていますが、互換性のためにsendmailバイナリを持っています)では、スクリプトからメールを送信したいときは、次のようなことを行います。

cat <<EOF | sendmail -t
To: [email protected]
Subject: Testing
From: [email protected]

This is a test message
EOF

空白行が重要であることに注意してください。

13
timday
echo -e "This is my body\nSecond line" 2>&1 | sed '1!b;s/^/To: [email protected]\nSubject: My Test Email Subject\n\n/' | sendmail -t

echo =メールの本文。
sed stuff =メールヘッダーを適用し、本文とヘッダーの間に重要な二重線を適用します。
sendmail -t = sendmailを介して直接パイプします。

1
Praveen R