既存の回答に基づいて、パスワードを開示せずに、コマンドラインからGMailアカウントを使用してSMTP経由で自動電子メールを送信するためのステップバイステップガイドを次に示します。
要件
まず、次のソフトウェアパッケージをインストールします。
これらの手順はLinuxオペレーティングシステムを想定していますが、Windows(Cygwinまたは同等のネイティブバージョンを介して)または他のオペレーティングシステムへの移植はかなり簡単である必要があります。
認証
次のシェルスクリプトを次のように保存しますauthentication.sh
。
#!/bin/bash
# Asks for a username and password, then spits out the encoded value for
# use with authentication against SMTP servers.
echo -n "Email (shown): "
read email
echo -n "Password (hidden): "
read -s password
echo
TEXT="\0$email\0$password"
echo -ne $TEXT | base64
実行可能にして、次のように実行します。
chmod +x authentication.sh
./authentication.sh
プロンプトが表示されたら、電子メールアドレスとパスワードを入力します。これは次のようになります。
Email (shown): bob@gmail.com
Password (hidden):
AGJvYkBnbWFpbC5jb20AYm9iaXN0aGViZXN0cGVyc29uZXZlcg==
最後の行(AGJ...==
)をコピーします。これは認証に使用されるためです。
通知
次のexpectスクリプトを次のように保存しますnotify.sh
(最初の行はexpectプログラムを参照していることに注意してください)。
#!/usr/bin/expect
set address "[lindex $argv 0]"
set subject "[lindex $argv 1]"
set ts_date "[lindex $argv 2]"
set ts_time "[lindex $argv 3]"
set timeout 10
spawn openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof
expect "220" {
send "EHLO localhost\n"
expect "250" {
send "AUTH PLAIN YOUR_AUTHENTICATION_CODE\n"
expect "235" {
send "MAIL FROM: <YOUR_EMAIL_ADDRESS>\n"
expect "250" {
send "RCPT TO: <$address>\n"
expect "250" {
send "DATA\n"
expect "354" {
send "Subject: $subject\n\n"
send "Email sent on $ts_date at $ts_time.\n"
send "\n.\n"
expect "250" {
send "quit\n"
}
}
}
}
}
}
}
次の変更を行います。
YOUR_AUTHENTICATION_CODE
認証スクリプトによって生成された認証コードを貼り付けます。
YOUR_EMAIL_ADDRESS
認証コードの生成に使用したメールアドレスに変更してください。
- ファイルを保存します。
たとえば(山かっこは電子メールアドレス用に保持されていることに注意してください):
send "AUTH PLAIN AGJvYkBnbWFpbC5jb20AYm9iaXN0aGViZXN0cGVyc29uZXZlcg==\n"
send "MAIL FROM: <bob@gmail.com>\n"
最後に、通知スクリプトを次のように実行可能にします。
chmod +x notify.sh
メールを送る
次のようにコマンドラインから電子メールを送信します。
./notify.sh recipient@domain.com "Command Line" "March 14" "15:52"