RaspbianとUbunntu 16.04 LTSを使用するため、一般的なLinuxソリューションが必要です。
要件は簡単です:
コマンドラインから1行の電子メールメッセージを送信する方法が必要です。
この特定のRpi3専用のGmailアカウントを、rpi3abc @ gmail.comのアドレスで設定しました-2FAはありません
したがって、ユーザーの介入なしに、どこからでも(cronを含めて)1行のメールメッセージを送信できる必要があります。
また、テキストファイルを送信できるようにしたいと考えています。基本的には、stdin
からのもの。
Gmail経由で1行のメッセージを送信する最も簡単な答えは、ssmtpを使用することです
次のコマンドを使用してインストールします。
Sudo apt-get update
Sudo apt-get install ssmtp
/etc/ssmtp/ssmtp.conf
を次のように編集します。
[email protected]
mailhub=smtp.gmail.com:465
FromLineOverride=YES
[email protected]
AuthPass=testing123
UseTLS=YES
次のようにワンライナーを送信します。
echo "Testing...1...2...3" | ssmtp [email protected]
または
printf "Subject: Test\n\nTesting...1...2...3" | ssmtp [email protected]
次に、* nixに忠実に、数秒でプロンプトが表示されます。
[email protected]アカウントを確認してください。できあがりです。
これは、ファイルを送信するときにも機能します。
cat program.py | ssmtp [email protected]
そして、プログラムはメールボックスに表示されます
ファイルがテキストファイルの場合、Subject: xxxxxx
という最初の行を含めることができます。
これは、さまざまなcronジョブで使用でき、内容を示す件名行を含むデータを私に送信できます。
これは、stdinを介してssmtpにパイプされるメッセージを準備するものであれば何でも機能します。
これらのファイルを他のユーザーから保護するなどの詳細については、次の記事を参照してください。
必要に応じて、フォーマットされたメッセージファイルで変更される可能性のあるFROM:
アドレスのロックダウンについて、Rui
が投稿した回答も必ず以下で確認してください。
同じようにSMSを送信する方法を理解できたとしたら。
ssmtp
は、多くのSendmailラッパーの1つにすぎません。これらはすべて、標準入力でメッセージを受け取り、オプションでアドレスのリストをコマンドライン引数として受け入れます。これらはすべて、従来のSendmailコマンドラインAPIを(少なくとも基本的な機能として)実装するsendmail
という名前のバイナリを提供します。しかし、正しく言えば、そのメッセージは整形式のRFC822メッセージである必要があります。少なくとも、Subject:
ヘッダー。
ssmtp [email protected] <<<$'Subject: testing 1...2...3'
(ssmtp
では、sendmail
はssmtp
へのシンボリックリンクです。Postfix、Exim、およびProvides: mail-transport-agent
も同様ですが、sendmail
バイナリが「本物」であるsendmail
はもちろんです。
より一般的には、簡単な電子メールメッセージとヒアドキュメントを組み合わせることができます。
/usr/lib/sendmail -oi -t <<____HERE
Subject: testing
To: [email protected]
Here we interpolate the Shell variable $result
____HERE
(Sendmail -t
オプションは、標準入力で受信するメッセージのヘッダーから受信者リストを取得することを示しています。 Sendmailへの正確なパスはプラットフォーム間で異なります。)
別の一般的なバリエーションは、いくつかのコマンドの出力を組み合わせることです。ヘッダーとメッセージ本文の間に空の行(「ネック」)があるように注意してください。
( printf "Subject: random number\n\n"
dd if=/dev/urandom bs=4 count=1 2>/dev/null | od -D -An ) |
sendmail [email protected]
非常に単純なASCIIテキストのみのメッセージを超える場合は、適切なMIMEメッセージを作成する方法を理解する必要があります。その時点で、通常、mutt
などのツールを使用する方が理にかなっています。一部のプラットフォームでは添付ファイルと非ASCIIテキストの送信方法を知っているmail
またはmailx
。ただし、これは完全に移植可能ではありません。
ここでの課題は、電子メールメッセージを受け取って送信できるクライアントを見つけることではなく、Gmailの詳細を設定することです。これには、MTAがリモートサーバーに使用するユーザー名とパスワードを知っている必要があります。それを発信スマートホストとして使用できるようにします。
舞台裏では、mutt
、mailx
などのほとんどのクライアントは通常、舞台裏でsendmail
を実行して、システムからメッセージを取得します。
OP自身の答えに追加:
ssmtp
を設定するとき、ユーザーがFromを定義することを禁止または許可し、ドメインをオーバーライドすることもできます。メッセージが[Spam]フォルダーに分類されないなど、いくつかの理由でそうしたい場合があります。
/etc/ssmtp/ssmtp.conf
に追加できます:
# Where will the mail seem to come from?
rewriteDomain=my_internet_domain.uk
# Are users allowed to set their own From: address?
# YES - Allow the user to specify their own From: address
# NO - Use the system generated From: address
FromLineOverride=YES
YESは家庭用のラズベリーで使用できますが、マルチユーザーシステムではセキュリティの観点から推奨されない場合があることに注意してください。
「メール」の何が問題になっていますか?
エコー "こんにちは" | mail -s "重要なメール" [email protected]
"mail"は、bsd-mailxパッケージから/ usr/bin/bsd-mailxへの/ etc/alternativeリンクです。デフォルトではあると思います。たとえば、cronスクリプトからメールを送信するための優れたユーティリティ。
UbuntuとFreeBSDでも動作します。
私はこのためにmailx
を使用することに本当に部分的です:
echo "Message body." | mailx -s "Subject line" -a /path/attachment.txt -r "Sender's Name<[email protected]>" -c [email protected] [email protected]
私はsendEmailを使用して、外部プロバイダーのSMTPサーバー経由で簡単な自動電子メールを送信します。
sendEmail -q -f "[email protected]" -u "mySubject" -t "[email protected]" -s "my.smtp.com" -o tls=yes -xu "mySmtpUser" -xp "mySmtpPw" -m "myMessage"
すべてを1行で渡すため、コマンドラインでこれを行うと、すべてのユーザーがps -ef
コマンドを実行している間。シェルスクリプト内で使用します。
私のサーバーはCEntOS 7で、sendmailはありますがmailxなどはありません。sendmailを直接使用してテストした新しいプログラムをインストールするのではなく、これが機能することがわかりました。
echo -e "From: you@whatever\nTo: [email protected]\nSubject: this is the subject\n\nThis is the body,\nwith multiple lines." | sendmail -t
サーバーまたはデーモンを実行または構成する必要がなく、単一のコマンドラインで実行できるため、私にとってこれは短い電子メールを送信する最も簡単な方法のようです。
メッセージは、特定のプログラムがエラーをスローしたことを通知するだけで、機密情報の可能性を明らかにすることはなく、サーバーにSSHでログを検査するという考え方です。このようにして、ファイルの添付やトランスポートの暗号化などの複雑な作業に煩わされる必要はありません。
ノート:
-e
は、echoに '\ n'およびその他のエスケープを解釈するように指示します。-t
は、メッセージヘッダーの「To:」から受信者アドレスを取得するようにsendmailに指示します。tail /var/log/maillog
エラーメッセージを表示します。