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


32

RaspbianとUbunntu 16.04 LTSを使用するには、汎用のLinuxソリューションが必要です。

要件は簡単です:

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

rpi3abc@gmail.comのアドレスを使用して、この特定のRpi3専用のGmailアカウントを設定しました-2FAなし

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


また、テキストファイルを送信できるようにしたいと思います。基本的に、から何かstdin


メッセージをこの特定のアドレスrpi3abc@gmail.comから送信するのか、それともメッセージがyour_username @ localhostから送信するのかは問題ありませんか?
ジョンスミス

rpi3abc@gmail.comから送信されているので、コンピューターが通信していることがわかります。私は主にcronジョブで使用します。
SDsolar

回答:


33

Gmailを介して1行のメッセージを送信するための最も簡単な答えは、ssmtpを使用することです


次のコマンドを使用してインストールします。

sudo apt-get update
sudo apt-get install ssmtp

次の/etc/ssmtp/ssmtp.confように編集します。

root=rpi3abc@gmail.com
mailhub=smtp.gmail.com:465
FromLineOverride=YES
AuthUser=rpi3abc@gmail.com
AuthPass=testing123
UseTLS=YES

次のようなワンライナーを送信します。

echo "Testing...1...2...3" | ssmtp myusername@gmail.com

または

printf "Subject: Test\n\nTesting...1...2...3" | ssmtp myusername@gmail.com

その後、* nixに忠実に、数秒でプロンプトが返されます。

myusername@gmail.comアカウントを確認すると、出来上がりです。


これは、ファイルを送信するときにも機能します。

cat program.py | ssmtp myotherusername@yahoo.com

そして、プログラムはメールボックスに表示されます

ファイルがテキストファイルの場合、最初の行に Subject: xxxxxx

これはさまざまなcronジョブで使用でき、コンテンツを示す件名行でデータを送信できます。


これは、stdinを介してssmtpにパイプされるメッセージを準備するすべてのもので機能します。


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

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


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


これで、SMSを同じ方法で送信する方法を理解できたとしたら。


1
私はまた、使用しssmtp、私のVMで非常に軽量。+1
ルイFリベイロ

1
Pythonのsendmail APIを使用して、直接送信しないのはなぜですか?
ルイFリベイロ

これをさらに進めるために、添付ファイルとして画像ファイルを含めるための非常に簡単な手順を次に示し
questions

Ruiの質問に答えるには: sendmailマシンの外部と通信するためのMTA-Mail Transport Agentだけではありません。デフォルトでは、Unixenは設計上マルチsendmailユーザーであるため、同じボックス内の他のユーザーにはメッセージを送信しますが、外部には送信しません。 ssmtpgmail用に設定するのが最も簡単だと思うMTAです。
SDsolar

1
これが機能するPostixをセットアップしようとして永遠に費やしました!これを読んでいる人への1つのメモ、confにはタイプミスがあり、ルートパラメータはgmailではなくgmail.comでなければなりません。
qodeninja

9

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

ssmtp address@example.com <<<$'Subject: testing 1...2...3'

ssmtpsendmailは、単にssmtp。へのシンボリックリンクです。Postfix、Exim、およびバイナリが「本物」であるProvides: mail-transport-agent場合を除き、同様の配置を持つ他のすべてのMTAを信じています。)sendmailsendmail

より一般的には、単純なメールメッセージとヒアドキュメントをつなぎ合わせることができます。

/usr/lib/sendmail -oi -t <<____HERE
Subject: testing
To: recipient@example.net

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 elsewhere@example.org

非常に単純なASCIIテキストのみのメッセージを超えるものについては、適切なMIMEメッセージの作成方法を理解する必要があります。その時点で、通常、などのツールを使用する方が理にかなっていますmutt。プラットフォームによっては、添付ファイルや非ASCIIテキストを送信する方法を知っている、mailまたは持っているものもありますが、mailxこれは完全には移植できません。

ここでの課題は、電子メールメッセージを受け取って送信しようとするクライアントを見つけることではなく、Gmailの仕様に合わせてクライアントを構成することです。発信スマートホストとして使用できるようにします。

舞台裏では、などのほとんどのクライアントmuttmailxなどは、一般的にだけ実行sendmailシステムオフのメッセージを取得するために舞台裏で。


sendmailを直接使用することはあまりうまくいきません。したがって、ssmtpに変わります。あなたの答えに賛成票を投じてください。ところで、添付ファイルとして画像を送信するために、私は可能な限り簡単な方法を見つけました。MIMEについて考える必要さえありません。ここで説明するように、mpackを使用します。unix.stackexchange.com/ questions
381131

8

OP自身の答えに追加する:

を構成ssmtpする場合、ユーザーがFromを定義することを禁止または許可し、ドメインをオーバーライドすることもできます。メッセージが迷惑メールフォルダに分類されないなど、いくつかの理由でこれを行うことができます。

以下に追加できます/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はホームラズベリーで使用できますが、セキュリティの観点からマルチユーザーシステムではお勧めできない場合があります。


賛成票。素晴らしい情報。
SDsolar

5

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

echo "こんにちは" | mail -s "重要なメール" user@example.com

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

UbuntuおよびFreeBSDでも動作します。


3
mailxただのフロントエンドです。ローカルシステムから実際にメッセージを取得するには、MTAを構成する必要があります。一般的に使用される互換性のないバージョンは複数ありますが、ターゲットプラットフォームがDebianのみの場合は、比較的最近のBSDの動作に依存できます。
トリプリー

4

私はmailxこれに使用することに本当に部分的です:

echo "Message body." | mailx -s "Subject line" -a /path/attachment.txt -r "Sender's Name<sender@email.com>" -c recipient2@email.com recipient1@email.com

1
ここにあるいくつかのオプションは、多くの非Debian /非BSDシステムでは利用できません。-a特にオプションは、それが普遍的にサポートされていたならば素晴らしいことが、ちょうど閲覧でしょうmailx、これはかなり確かにそうではないことを確認するために、ここで質問を。
トリプリー

2

sendEmailを使用して、外部プロバイダーのSMTPサーバーを介して簡単な自動化された電子メールを送信します。

sendEmail -q -f "me@mail.com" -u "mySubject" -t "someone@mail.org" -s "my.smtp.com" -o tls=yes -xu "mySmtpUser" -xp "mySmtpPw" -m "myMessage"

すべてを1行で渡すので、コマンドラインでこれを行うと、コマンドを実行しているps -efときにすべてのユーザーに(smtpパスワードを含む)すべてのパラメーターが表示される可能性があります。シェルスクリプト内で使用します。


1
これは標準インストールではなく、この名前のクライアントが複数あります。あなたはen.wikipedia.org/wiki/SendEmailを参照していると思います。Debianパッケージとして入手できますか?
トリプリー

マルチユーザーシステムのように、シェルスクリプトについてよく考えてください。パスワードがマシンの内部の奥深くにあるファイルにあるのが好きです。クリアテキストではなく、ハッシュ化されたパスワードを保存できるようにしたいだけです。
–SDsolar

私はこのパッケージを参照していました:packages.debian.org/search
keywords

1
この回答は、元の質問で指定されたgmailで機能することを示すものではありません。
–SDsolar

これはGmailで機能します。例: `-s smtp.gmail.com -o tls = yes -xp your_gmail_password -s smtp.gmail.com:587`
rogerdpack

1

私のサーバーはCEntOS 7であり、sendmailがありますが、mailxなどはありません。sendmailを使用して直接テストした新しいプログラムをインストールするのではなく、これが機能することがわかりました。

echo -e "From: you@whatever\nTo: you@gmail.com\nSubject: this is the subject\n\nThis is the body,\nwith multiple lines." | sendmail -t

私にとって、これはサーバーまたはデーモンを実行または構成する必要がなく、単一のコマンドラインで実行できるため、短い電子メールを送信する最も簡単な方法のようです。

考えは、潜在的な機密情報を明らかにすることなく、特定のプログラムがエラーをスローしたことを単にメッセージで警告し、ログを検査するためにサーバーにSSHで接続するというものです。この方法では、ファイルの添付やトランスポートの暗号化などの煩わしさを気にする必要はありません。

ノート:

  • -e echoに '\ n'およびその他のエスケープを解釈するよう指示します。
  • -t sendmailに、メッセージヘッダーの「To:」から受信者アドレスを取得するように指示します。
  • メールが届かない場合は、を使用tail /var/log/maillogしてエラーメッセージを表示します。
  • Gmailアドレスに送信する場合は、Gmailでフィルターを作成して、迷惑メールフォルダーに入れないようにします。
  • このsendmailは、実際には「sendmail.postfix」です(通常の場合があります)。ここにマニュアルページがあります

1
システムには、動作するMTAがインストールされている必要がありsendmail ますが、元の質問で指定されたGmailで動作することを示すこの回答は表示されません...
SDsolar

@SDsolarその通りです。サーバーでPostfixが実行されていますが、知りませんでした。Centosのインストールでは標準のようです。多分DigitalOceanがそれを設定した。パブリックポートでリッスンしていません。gmailを介して送信する場合、私のポイントは、あなたがする必要がないということです。自分だけに送信する場合は、自分のサーバーから直接送信できます。(ここに収まらない場合は、自分の質問をして、この答えを先に進めます。)
j77h
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.