web-dev-qa-db-ja.com

コマンドライン経由でsmtp.gmail.comに接続する

有効なGMailユーザーIDとパスワードを使用してメールを送信するアプリケーションを作成中です。

Windows XPコマンドラインで、465ポートでsmtp.gmail.comにtelnetで接続すると、何も表示されません。何も表示されません。 title Telnet smtp.gmail.comがカーソルで開きますEHLOまたは通常のSMTPハンドシェイクコマンドを入力すると、プロンプトが閉じます。

何が間違っているのか、どこで起こっているのかがわかりません。 587に接続しようとしましたが、telnetでまったく接続しません。私が何か間違ったことをしている場合、誰でも明確にしていただけますか?

41
Abhishek

LinuxまたはOSxを使用して、Sorinが推奨したことを行いますが、代わりにポート465を使用します。 25は汎用SMTPポートですが、GMailが使用するものではありません。また、-starttls smtpを使用したいとは思わない

openssl s_client -connect smtp.gmail.com:465

SSLセッションと応答に関する多くの情報を取得する必要があります。

220 mx.google.com ...

入力する

HELO smtp.gmail.com 

受け取るもの:

250 mx.google.com at your service

そこからは、Gmailには実際に自分が所有するアカウントからのものと思われるメールのみを送信するように保護されているため、SMTPメッセージの送信ほど単純ではありません。 「Helo」と入力する代わりに、「Ehlo」を使用します。私はSMTPについてあまり知らないので、その違いを説明することはできず、あまり研究する時間もありません。おそらく、もっと知識のある人が説明できるでしょう。

次に、「auth login」と入力すると、次のメッセージが表示されます。

334 VXNlcm5hbWU6

これは、基本的にBase 64でエンコードされたWordの「ユーザー名」です。 this one などのBase 64エンコーダーを使用して、ユーザー名をエンコードして入力します。次に要求されるパスワードについても同じことを行います。見るべき:

235 2.7.0 Accepted

これでログインできました。

OSxまたはLinux端末を使用している場合は、もう1つ克服する必要があります。 「ENTER」キーを押すだけでは、SMTPがメッセージを終了する必要のあるCRLFになりません。 「CTRL + V + ENTER」を使用する必要があります。したがって、これは次のようになります。

^M
.^M
250 2.0.0 OK
53
the911s

OSX '端末の場合:

openssl s_client -connect smtp.gmail.com:25 -starttls smtp 
7

Gmailでは、サーバーとのSMTP通信を暗号化する必要があります。ポート465でGmailのサーバーへの接続を開いていますが、残念ながら、Gmailでは接続にSTARTTLS/SSL暗号化を使用する必要があるため、プレーンテキストで通信することはできません。

6
Jez

端末からセッションを開始:

openssl s_client -connect smtp.gmail.com:25 -starttls smtp

応答の最後の行は「250 SMTPUTF8」である必要があります

ログインの開始

auth login

これにより、「334 VXNlcm5hbWU6」が返されます。

ユーザー名を入力

ユーザー名をbase64エンコードで入力します(例:echo -n 'your-username' | base64

これにより、「334 UGFzc3dvcmQ6」が返されます。

パスワードの入力

Base64エンコーディングでパスワードを入力します(例:echo -n 'your-password' | base64

成功

「235 2.7.0 Accepted」と表示され、正常にログインしています。

4
sqren

Jadaaih、CURL経由で送信SMTPに接続できます- Curl開発者コミュニティへのリンク

これは Curl Email Client source です。

4
Jasmin25

tcp/465は当初、最初にSSL(およびより新しいTLS)層を確立することを目的としており、内部ではクリアテキストプロトコルまたはプレーンオールドプロトコル(ここではsmtp)を実行します。

tcp/587は、10年以上前にスパマーや大量メール攻撃が開始された当初はデフォルトのtcp/25ポートの代わりとして使用されていましたが、変なISPがデフォルトのポートにアウトバウンド(そのtcp/25として)自身の顧客(AOL)が電子メール/スパムを大量に送信することを拒否したが、AOLインターネット接続からメールを送信するために必要な代替メールアカウントとメールプロバイダーを使用する必要があるAOL顧客、したがって、彼らはまだtcp/587に接続し、その上で簡単なsmtpを実行できました。

STARTTLSでsmtpを実行する方法の対処法は、2つのよく知られている元のプレーンテキストtcp/25およびtcp/587ポートを使用し、最初のクリアテキスト接続が成功した場合にのみ、TLSレイヤーを開始することです(したがってSTARTTLS)そこから、そのポイントから先に安全な接続を持ちます。

これらの種類のデバッグについては、たとえばコマンドラインツールを使用して、たとえばWindowsの場合、歴史的なblatコマンドラインメーラー(smtp)があります。これは今日までTLS(STARTTLS)を実行できないため、メールを送信します。

http://www.blat.net/

さらに、次のようなより多くの機能と機能を備えたフリーウェアとオープンソースソフトウェアが多数あります。

smtpクライアント:mailsend @ googlecode http://code.google.com/p/mailsend/

smtpクライアント:msmtp @ sourceforge(以下のmpopに関連) http://msmtp.sourceforge.net/

pop3クライアント:mpop @ sourceforge http://mpop.sourceforge.net/

2
abittner

Lifehackerでこの投稿を確認してください。 Geek to Live:fetchmailでGmailをバックアップしてください コマンドラインプログラムを使用します。それが役立つかどうかを確認してください。ところで、他の多くの素敵な選択肢があるのに、なぜコマンドラインを使用しているのですか?

2
Shoban

これを試して:

telnet smtp.gmail.com 587
1
none

gmailは暗号化された接続を使用します。したがって、接続を確立した後でも、メールを送信することはできません。暗号化の管理は少し複雑です。代わりにopensslを使用してみてください。

以下のスレッドが役立つはずです-

Gmail経由で簡単なSMTPコマンドを使用してメールを送信する方法

0
dark3viL