web-dev-qa-db-ja.com

SMTP、Gmail、およびSTARTTLSを使用する

だから私はSMTPについて学び、SMTP経由でメールを送信するためにtelnetを使用しようとしています。

私は簡単にメールを送信できましたto私のGmailアカウント:

$ Host gmail.com
...
gmail.com mail is handled by 5 gmail-smtp-in.l.google.com.
...
$ telnet gmail-smtp-in.l.google.com 25
Trying 74.125.142.27...
...
Connected to gmail-smtp-in.l.google.com.
...
HELO <[email protected]>
...

しかし、私はfrom Gmailアカウントの送信に問題があります。 SMTPについて理解していることから、SMTPを使用して<[email protected]>から送信gmail SMTPサーバーにメールを送信する必要があります。

しかし、私は問題を抱えています。ポートsmtp.gmail.com(正規のGmail送信SMTPメールサーバー)経由でtelnet465に入れると、HELO <[email protected]>で開始した後すぐに切断されるか、STARTTLS。続行方法についての答えが見つかりません。

どんな助けも大歓迎です。

補足:現在、スターバックスの無料Wi-Fiを使用してインターネットにアクセスしています。私は実際にコンピューターから直接telnetすることができません(ホストへのルートエラーがありません)。代わりに、学校のネットワーク上のリモートlinuxボックスに最初にsshし、次にそこからtelnetになった場合にのみ機能します。なぜこれが理由ですか?

ありがとう!

10
gone

まず、間違ったポートを使用しているようです。 Gmailは、SSLを介したSMTPの場合はポート465、STARTTLSを使用したSMTPの場合はポート587を ここに記載 として公開します。これら2つの違いは、SMTP over SSLは最初に安全なSSL/TLS接続を確立し、その接続を介してSMTPを実行します。これが、HELOに対する応答が得られない理由です。

$ telnet smtp.gmail.com 587
Trying 74.125.25.108...
Connected to gmail-smtp-msa.l.google.com.
Escape character is '^]'.
220 mx.google.com ESMTP fr1sm24834956pbb.26 - gsmtp
HELO <[email protected]>
250 mx.google.com at your service
STARTTLS
220 2.0.0 Ready to start TLS

ただし、ポート587にtelnetしても、手動でメールを送信することはできません。おもしろいことをするには、 [〜#〜] starttls [〜#〜] が必要です。 SSL/TLSバイナリプロトコル を処理することはできません。 =暗号化をネゴシエートします。

23
rhashimoto

Telnetクライアントは、TLSセッションをネゴシエートしません。 OpenSSLのs_clientなどの別のツールを使用する必要があります。以下はSTARTTLSコマンドを発行し、TLSネゴシエーションを処理します。

$ openssl s_client -starttls smtp -connect smtp.gmail.com:587 -crlf

または、SMTPSポートに直接接続できます。

$ openssl s_client -connect smtp.gmail.com:465 -crlf
17
Erwan Legrand