だから私は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メールサーバー)経由でtelnet
を465
に入れると、HELO <[email protected]>
で開始した後すぐに切断されるか、STARTTLS
。続行方法についての答えが見つかりません。
どんな助けも大歓迎です。
補足:現在、スターバックスの無料Wi-Fiを使用してインターネットにアクセスしています。私は実際にコンピューターから直接telnet
することができません(ホストへのルートエラーがありません)。代わりに、学校のネットワーク上のリモートlinuxボックスに最初にssh
し、次にそこからtelnet
になった場合にのみ機能します。なぜこれが理由ですか?
ありがとう!
まず、間違ったポートを使用しているようです。 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バイナリプロトコル を処理することはできません。 =暗号化をネゴシエートします。
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