教育目的のために、SMTPの基本的で単純なルールを使用して、SMTPサーバー経由で電子メールを送信する必要があります。
smtp4dev を使用してそれを行うことができました。 I telnet localhost 25
およびandコマンドは次のとおりです。
Gmail SMTPサーバーを使用して、同じことをしたいです。ただし、認証とTLSが必要です。 Gmailでこれを行う方法がわかりません。 telnet smtp.gmail.com 587
のスクリーンショットは次のとおりです。
Wikipediaの記事 about STARTTLS
コマンドを含む多くのリンクを検索しました。しかし、TLSを使用して、コマンドラインを使用して(またはプログラミング言語で自分でコマンドを送信して)GmailのSMTPサーバーに対して認証することはできません。誰でも助けることができますか?
gmailで送信するには、暗号化された接続を使用する必要があります。これはtelnetだけでは不可能ですが、 openssl のようなツールを使用できます
eitheropensslのstarttlsオプションを使用して接続し、プレーン接続を暗号化に変換します...
openssl s_client -starttls smtp -connect smtp.gmail.com:587 -crlf -ign_eof
またはssl sockectに直接接続...
openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof
EHLO localhost
その後、base64でエンコードされたユーザー名/パスワードを使用してサーバーに対して認証します
AUTH PLAIN AG15ZW1haWxAZ21haWwuY29tAG15cGFzc3dvcmQ =
これをコマンドラインから取得するには:
echo -ne '\[email protected]\00password' | base64
AHVzZXJAZ21haWwuY29tAHBhc3N3b3Jk
あなたの例のように「からのメール」に進みます
セッション例:
openssl s_client -connect smtp.gmail.com:465 -crlf -ign_eof
[... lots of openssl output ...]
220 mx.google.com ESMTP m46sm11546481eeh.9
EHLO localhost
250-mx.google.com at your service, [1.2.3.4]
250-SIZE 35882577
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES
AUTH PLAIN AG5pY2UudHJ5QGdtYWlsLmNvbQBub2l0c25vdG15cGFzc3dvcmQ=
235 2.7.0 Accepted
MAIL FROM: <[email protected]>
250 2.1.0 OK m46sm11546481eeh.9
rcpt to: <[email protected]>
250 2.1.5 OK m46sm11546481eeh.9
DATA
354 Go ahead m46sm11546481eeh.9
Subject: it works
yay!
.
250 2.0.0 OK 1339757532 m46sm11546481eeh.9
quit
221 2.0.0 closing connection m46sm11546481eeh.9
read:errno=0
残念ながら、Windowsサーバーを使用せざるを得ないため、上記の回答が示す方法でopensslを動作させることができませんでした。
しかし、stunnelと呼ばれる同様のプログラム( here からダウンロードできます)を動作させることができました。 www.tech-and-dev.com からアイデアを得ましたが、手順を少し変更する必要がありました。ここに私がやったことがあります:
stunnel.conf
構成ファイルを見つける必要がありました。私の場合は、C:\Program Files (x86)\stunnel
にインストールしました次に、このファイルをnotepadなどのテキストビューアーで開く必要があります。 [gmail-smtp]
を探し、以下のクライアント行でセミコロンを削除します(stunnel.confファイルでは、セミコロンで始まる行はすべてコメントです)。次のような結果になるはずです。
[gmail-smtp]
client = yes
accept = 127.0.0.1:25
connect = smtp.gmail.com:465
これが完了したら、stunnel.conf
ファイルとreload構成を保存します(これを行うには、stunnel GUIプログラムを使用し、configuration => Reload)。
これで、Windows telnetクライアントで電子メールを送信する準備ができました。
Start => run => cmdに移動します。
Cmdが開いたら、次を入力してEnterを押します。
telnet localhost 25
次のようなものが表示されます。
220 mx.google.com ESMTP f14sm1400408wbe.2
次に、次を入力してEnterキーを押して返信する必要があります。
helo google
これにより、次の応答が返されます。
250 mx.google.com at your service
これを取得した場合は、次を入力してEnterキーを押す必要があります。
ehlo google
これにより、次の応答が返されます。
250-mx.google.com at your service, [212.28.228.49]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN XOAUTH
250 ENHANCEDSTATUSCODES
これで、Gmailの詳細で認証する準備ができました。これを行うには、次を入力してEnterキーを押します。
AUTH LOGIN
これにより、次の応答が返されます。
334 VXNlcm5hbWU6
これは、Gmailアドレスとパスワードを使用して認証する準備ができたことを意味します。
ただし、これは暗号化されたセッションであるため、base64でエンコードされたメールとパスワードを送信する必要があります。メールとパスワードをエンコードするには、コンバータープログラムまたはオンラインWebサイトを使用してエンコードします(たとえば、 base64 またはGoogleで 'base64 online encoding')。これを行うまで、cmd/telnetセッションに再度触れないことをお勧めします。
たとえば、[email protected]はdGVzdEBnbWFpbC5jb20 =になり、パスワードはcGFzc3dvcmQ =
このコピーが完了したら、変換されたbase64ユーザー名をcmd/telnetセッションに貼り付け、Enterを押します。これにより、次の応答が得られます。
334 UGFzc3dvcmQ6
次に、変換したbase64パスワードをコピーしてcmd/telnetセッションに貼り付け、Enterキーを押します。両方のログイン資格情報が正しい場合、これにより次の応答が得られます。
235 2.7.0 Accepted
次の形式で送信者の電子メール(ユーザー名と同じである必要があります)を入力し、Enterを押します。
MAIL FROM:<[email protected]>
これにより、次の応答が返されます。
250 2.1.0 OK x23sm1104292weq.10
これで、受信者の電子メールアドレスを同様の形式で入力し、Enterキーを押します。
RCPT TO:<[email protected]>
これにより、次の応答が返されます。
250 2.1.5 OK x23sm1104292weq.10
ここで、次を入力してEnterキーを押す必要があります。
DATA
これにより、次の応答が得られます。
354 Go ahead x23sm1104292weq.10
これでメッセージの作成を開始できます!これを行うには、次の形式でメッセージを入力します(Tip:メモ帳でこれを行い、 cmd/telnetセッションへのメッセージ全体):
From: Test <[email protected]>
To: Me <[email protected]>
Subject: Testing email from telnet
This is the body
Adding more lines to the body message.
メールを終えたら、ドットを入力してください:
.
これにより、次の応答が返されます。
250 2.0.0 OK 1288307376 x23sm1104292weq.10
次に、次を入力してEnterキーを押して、セッションを終了する必要があります。
QUIT
これにより、次の応答が返されます。
221 2.0.0 closing connection x23sm1104292weq.10
Connection to Host lost.
これで、メールは受信者のメールボックスにあるはずです!
誰も言及していないように-私はそのような目的のために素晴らしいツールを使用することを提案します-swaks
# yum info swaks
Installed Packages
Name : swaks
Arch : noarch
Version : 20130209.0
Release : 3.el6
Size : 287 k
Repo : installed
From repo : epel
Summary : Command-line SMTP transaction tester
URL : http://www.jetmore.org/john/code/swaks
License : GPLv2+
Description : Swiss Army Knife SMTP: A command line SMTP tester. Swaks can test
: various aspects of your SMTP server, including TLS and AUTH.
それは多くのオプションがあり、あなたが望むほとんどすべてを行うことができます。
GMAIL:STARTTLS、SSLv(そして、はい、2016年のGmailはまだsslv3をサポートしています)
$ echo "Hello world" | swaks -4 --server smtp.gmail.com:587 --from [email protected] --to [email protected] -tls --tls-protocol sslv3 --auth PLAIN --auth-user [email protected] --auth-password 7654321 --h-Subject "Test message" --body -
=== Trying smtp.gmail.com:587...
=== Connected to smtp.gmail.com.
<- 220 smtp.gmail.com ESMTP h8sm76342lbd.48 - gsmtp
-> EHLO www.example.net
<- 250-smtp.gmail.com at your service, [193.243.156.26]
<- 250-SIZE 35882577
<- 250-8BITMIME
<- 250-STARTTLS
<- 250-ENHANCEDSTATUSCODES
<- 250-PIPELINING
<- 250-CHUNKING
<- 250 SMTPUTF8
-> STARTTLS
<- 220 2.0.0 Ready to start TLS
=== TLS started with cipher SSLv3:RC4-SHA:128
=== TLS no local certificate set
=== TLS peer DN="/C=US/ST=California/L=Mountain View/O=Google Inc/CN=smtp.gmail.com"
~> EHLO www.example.net
<~ 250-smtp.gmail.com at your service, [193.243.156.26]
<~ 250-SIZE 35882577
<~ 250-8BITMIME
<~ 250-AUTH LOGIN PLAIN XOAUTH2 PLAIN-CLIENTTOKEN OAUTHBEARER XOAUTH
<~ 250-ENHANCEDSTATUSCODES
<~ 250-PIPELINING
<~ 250-CHUNKING
<~ 250 SMTPUTF8
~> AUTH PLAIN AGFhQxsZXguaGhMGdATGV4X2hoYtYWlsLmNvbQBS9TU1MjQ=
<~ 235 2.7.0 Accepted
~> MAIL FROM:<[email protected]>
<~ 250 2.1.0 OK h8sm76342lbd.48 - gsmtp
~> RCPT TO:<[email protected]>
<~ 250 2.1.5 OK h8sm76342lbd.48 - gsmtp
~> DATA
<~ 354 Go ahead h8sm76342lbd.48 - gsmtp
~> Date: Wed, 17 Feb 2016 09:49:03 +0000
~> To: [email protected]
~> From: [email protected]
~> Subject: Test message
~> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/
~>
~> Hello world
~>
~>
~> .
<~ 250 2.0.0 OK 1455702544 h8sm76342lbd.48 - gsmtp
~> QUIT
<~ 221 2.0.0 closing connection h8sm76342lbd.48 - gsmtp
=== Connection closed with remote Host.
YAHOO:TLS aka SMTPS、tlsv1.2
$ echo "Hello world" | swaks -4 --server smtp.mail.yahoo.com:465 --from [email protected] --to [email protected] --tlsc --tls-protocol tlsv1_2 --auth PLAIN --auth-user [email protected] --auth-password 7654321 --h-Subject "Test message" --body -
=== Trying smtp.mail.yahoo.com:465...
=== Connected to smtp.mail.yahoo.com.
=== TLS started with cipher TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128
=== TLS no local certificate set
=== TLS peer DN="/C=US/ST=California/L=Sunnyvale/O=Yahoo Inc./OU=Information Technology/CN=smtp.mail.yahoo.com"
<~ 220 smtp.mail.yahoo.com ESMTP ready
~> EHLO www.example.net
<~ 250-smtp.mail.yahoo.com
<~ 250-PIPELINING
<~ 250-SIZE 41697280
<~ 250-8 BITMIME
<~ 250 AUTH PLAIN LOGIN XOAUTH2 XYMCOOKIE
~> AUTH PLAIN AGFhQxsZXguaGhMGdATGV4X2hoYtYWlsLmNvbQBS9TU1MjQ=
<~ 235 2.0.0 OK
~> MAIL FROM:<[email protected]>
<~ 250 OK , completed
~> RCPT TO:<[email protected]>
<~ 250 OK , completed
~> DATA
<~ 354 Start Mail. End with CRLF.CRLF
~> Date: Wed, 17 Feb 2016 10:08:28 +0000
~> To: [email protected]
~> From: [email protected]
~> Subject: Test message
~> X-Mailer: swaks v20130209.0 jetmore.org/john/code/swaks/
~>
~> Hello world
~>
~>
~> .
<~ 250 OK , completed
~> QUIT
<~ 221 Service Closing transmission
=== Connection closed with remote Host.
過去5年間、問題なくGmail経由でnagiosからメール通知を送信するためにスワックを使用しています。
既存の回答に基づいて、パスワードを開示せずに、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): [email protected]
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: <[email protected]>\n"
最後に、通知スクリプトを次のように実行可能にします。
chmod +x notify.sh
次のようにコマンドラインから電子メールを送信します。
./notify.sh [email protected] "Command Line" "March 14" "15:52"