Linuxシェルスクリプトから電子メールを送信したいです。これを行うための標準的なコマンドは何ですか?特別なサーバー名を設定する必要がありますか?
サーバーが適切に構成されている場合、たとえば、MTAが稼働している場合は、mailコマンドを使用できます。
たとえば、ファイルの内容を送信するには、次のようにします。
$ cat /path/to/file | mail -s "your subject" [email protected]
詳細についてはman mail
。
Bashでクリーンでシンプルなアプローチを望み、cat
、echo
などを使用したくない場合は、最も簡単な方法は次のようになります。
mail -s "subject here" [email protected] <<< "message"
<<<
は標準入力をリダイレクトするために使用されます。それは長い間bashの一部でした。
Eximとssmtpの両方が実行されていると、問題が発生する可能性があります。ですから、単純なMTAを実行したい場合、単純なsmtpクライアントに電子メールによる通知を送信する場合は、eximまたはpostfixのように、最終的にプレインストールされたMTAを削除します。最初にssmtpを再インストールしてください。
それから、2つのファイル(revaliasesとssmtp.conf)だけを設定することはとても簡単です - ssmtp docを見てください - そしてあなたのbashまたはbourneスクリプトの使い方は以下のようになります:
#!/bin/sh
SUBJECT=$1
RECEIVER=$2
TEXT=$3
SERVER_NAME=$HOSTNAME
SENDER=$(whoami)
USER="noreply"
[[ -z $1 ]] && SUBJECT="Notification from $SENDER on server $SERVER_NAME"
[[ -z $2 ]] && RECEIVER="another_configured_email_address"
[[ -z $3 ]] && TEXT="no text content"
MAIL_TXT="Subject: $SUBJECT\nFrom: $SENDER\nTo: $RECEIVER\n\n$TEXT"
echo -e $MAIL_TXT | sendmail -t
exit $?
明らかに、smtpポート(25)へのファイアウォール出力を開くことを忘れないでください。
Bashスクリプトの中のもう一つのオプション:
mailbody="Testmail via bash script"
echo "From: [email protected]" > /tmp/mailtest
echo "To: [email protected]" >> /tmp/mailtest
echo "Subject: Mailtest subject" >> /tmp/mailtest
echo "" >> /tmp/mailtest
echo $mailbody >> /tmp/mailtest
cat /tmp/mailtest | /usr/sbin/sendmail -t
/tmp/mailtest
が上書きされます。通常、mail
コマンドを使用してローカルMTAを使用してメッセージを送信します(SMTPを使用して宛先に配信するか、ISPなどのより強力なSMTPサーバーに転送するだけです)。ローカルのMTAを持っていない場合(UNIXのようなシステムでは省略するのは少し珍しいことですが)、 ssmtp のような最小限のMTAを使用することもできます。
ssmtp
は設定がとても簡単です。基本的には、プロバイダのSMTPサーバーの場所を指定するだけです。
# The place where the mail goes. The actual machine name is required
# no MX records are consulted. Commonly mailhosts are named mail.domain.com
# The example will fit if you are in domain.com and you mailhub is so named.
mailhub=mail
もう1つの選択肢は、 Smtp-Auth-Email-Script 、 smtp-cli のように、SMTPサーバーに直接接続してそこにメッセージを投稿しようとする無数のスクリプトの1つを使用することです。 =、 SendEmail など.
あなたがいくつかのSMTPサーバを使用したいことを認めて、あなたはすることができます:
export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"
somehost
、someport
、およびsomeaccount@somedomain
を実際に使用する値に変更します。この例では、暗号化も認証も実行されません。
Linuxでは、mailユーティリティを使用して、オプション "-a"で添付ファイルを送信できます。オプションについて読むためにmanページを調べてください。例えば以下のコードは添付ファイルを送信します。
mail -s "THIS IS SUBJECT" -a attachment.txt [email protected] <<< "こんにちは、失敗の報告を見つけてください。"
MTAも必要ありません。 SMTPプロトコルはあなたのSMTPサーバに直接それを書くのに十分簡単です。 OpenSSLパッケージがインストールされていれば、SSL/TLSを介して通信することさえできます。この記事をチェックしてください。 https://33Hops.com/send-email-from-bash-Shell.html
上記は、箱から出して動作するtext/html Eメールの送信方法の例です。添付ファイルを追加したいのであれば、もう少し複雑になる可能性がありますので、バイナリファイルをbase64でエンコードし、それらを境界の間に埋め込む必要があります。これは調査を始めるのに良い場所です: http://forums.codeguru.com/showthread.php?418377-Send-Email-w-attachments-using-SMTP
'email'または 'emailx'コマンドを使用できます。
(1)$ vim /etc/mail.rc#または#vim /etc/nail.rc
set from = [email protected] #
set smtp = smtp.exmail.gmail.com #gmail's smtp server
set smtp-auth-user = [email protected] #sender's email address
set smtp-auth-password = xxxxxxx #get from gmail, not your email account passwd
set smtp-auth=login
(2)$ echo「Plsは未使用のonsトピックを削除するのを忘れないでください!」 | mail -s "トピックを無駄にする" -a a.txt [email protected]#グループユーザー '[email protected]'に送る
mail
コマンドはそれを実行します(誰が推測していたでしょう;-)。シェルを開いてman mail
を入力すると、利用可能なすべてのオプションについてmail
コマンドのマニュアルページが表示されます。