web-dev-qa-db-ja.com

Linuxシェルスクリプトからメールを送信する

Linuxシェルスクリプトから電子メールを送信したいです。これを行うための標準的なコマンドは何ですか?特別なサーバー名を設定する必要がありますか?

105
Zubair

サーバーが適切に構成されている場合、たとえば、MTAが稼働している場合は、mailコマンドを使用できます。

たとえば、ファイルの内容を送信するには、次のようにします。

$ cat /path/to/file | mail -s "your subject" [email protected]

詳細についてはman mail

111

Bashでクリーンでシンプルなアプローチを望み、catechoなどを使用したくない場合は、最も簡単な方法は次のようになります。

mail -s "subject here" [email protected] <<< "message"

<<<は標準入力をリダイレクトするために使用されます。それは長い間bashの一部でした。

84
user767124

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)へのファイアウォール出力を開くことを忘れないでください。

24
hornetbzz

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が上書きされます。
  • Sendmailの場所はシステムによって異なります。
  • これをcronスクリプトで使用するときは、sendmailコマンドに絶対パスを使用する必要があります。
8
SPRBRN

通常、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-Scriptsmtp-cli のように、SMTPサーバーに直接接続してそこにメッセージを投稿しようとする無数のスクリプトの1つを使用することです。 =、 SendEmail など.

7
GreyCat

あなたがいくつかのSMTPサーバを使用したいことを認めて、あなたはすることができます:

export SUBJECT=some_subject
export smtp=somehost:someport
export EMAIL=someaccount@somedomain
echo "some message" | mailx -s "$SUBJECT" "$EMAIL"

somehostsomeport、およびsomeaccount@somedomainを実際に使用する値に変更します。この例では、暗号化も認証も実行されません。

4
Germano

Linuxでは、mailユーティリティを使用して、オプション "-a"で添付ファイルを送信できます。オプションについて読むためにmanページを調べてください。例えば以下のコードは添付ファイルを送信します。

mail -s "THIS IS SUBJECT" -a attachment.txt [email protected] <<< "こんにちは、失敗の報告を見つけてください。"

2
krish___na

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

2
Daniel J.

'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]'に送る

1
TINGTING WANG

mailコマンドはそれを実行します(誰が推測していたでしょう;-)。シェルを開いてman mailを入力すると、利用可能なすべてのオプションについてmailコマンドのマニュアルページが表示されます。

1
DarkDust