web-dev-qa-db-ja.com

Gmailを使用してコマンドライン経由で1行のメールを送信する最も簡単な方法は?

RaspbianとUbunntu 16.04 LTSを使用するため、一般的なLinuxソリューションが必要です。

要件は簡単です:

コマンドラインから1行の電子メールメッセージを送信する方法が必要です。

この特定のRpi3専用のGmailアカウントを、rpi3abc @ gmail.comのアドレスで設定しました-2FAはありません

したがって、ユーザーの介入なしに、どこからでも(cronを含めて)1行のメールメッセージを送信できる必要があります。


また、テキストファイルを送信できるようにしたいと考えています。基本的には、stdinからのもの。

34
SDsolar

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にパイプされるメッセージを準備するものであれば何でも機能します。


これらのファイルを他のユーザーから保護するなどの詳細については、次の記事を参照してください。

Raspberry Piコマンドラインからメールを送信


必要に応じて、フォーマットされたメッセージファイルで変更される可能性のあるFROM:アドレスのロックダウンについて、Ruiが投稿した回答も必ず以下で確認してください。


同じようにSMSを送信する方法を理解できたとしたら。

36
SDsolar

ssmtpは、多くのSendmailラッパーの1つにすぎません。これらはすべて、標準入力でメッセージを受け取り、オプションでアドレスのリストをコマンドライン引数として受け入れます。これらはすべて、従来のSendmailコマンドラインAPIを(少なくとも基本的な機能として)実装するsendmailという名前のバイナリを提供します。しかし、正しく言えば、そのメッセージは整形式のRFC822メッセージである必要があります。少なくとも、Subject:ヘッダー。

ssmtp [email protected] <<<$'Subject: testing 1...2...3'

ssmtpでは、sendmailssmtpへのシンボリックリンクです。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がリモートサーバーに使用するユーザー名とパスワードを知っている必要があります。それを発信スマートホストとして使用できるようにします。

舞台裏では、muttmailxなどのほとんどのクライアントは通常、舞台裏でsendmailを実行して、システムからメッセージを取得します。

9
tripleee

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は家庭用のラズベリーで使用できますが、マルチユーザーシステムではセキュリティの観点から推奨されない場合があることに注意してください。

8
Rui F Ribeiro

「メール」の何が問題になっていますか?

エコー "こんにちは" | mail -s "重要なメール" [email protected]

"mail"は、bsd-mailxパッケージから/ usr/bin/bsd-mailxへの/ etc/alternativeリンクです。デフォルトではあると思います。たとえば、cronスクリプトからメールを送信するための優れたユーティリティ。

UbuntuとFreeBSDでも動作します。

5
Edheldil

私はこのためにmailxを使用することに本当に部分的です:

echo "Message body." | mailx -s "Subject line" -a /path/attachment.txt -r "Sender's Name<[email protected]>" -c [email protected] [email protected]
4
Christopher

私は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コマンドを実行している間。シェルスクリプト内で使用します。

2
user684790

私のサーバーは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エラーメッセージを表示します。
  • Gmailアドレスに送信する場合は、Gmailでフィルターを作成して、迷惑メールフォルダーから除外してください。
  • このsendmailは実際には「sendmail.postfix」です(これは正常な場合があります)。マニュアルページがあります ここ
1
j77h