技術解説 · 出典付きの回答
ポート587が開いているか確認する方法
ポート587が開いているかどうかは、telnet、netcat、PowerShellなどのコマンドラインツールでSMTPサーバーへの接続を試みることで確認できます。接続に成功すると、サーバーは通常220のグリーティングコードを返します。これは、ポートが開いていてメールのサブミッション用の接続を受け付けていることを示します。
Telnetで接続をテストする
TelnetはTCP接続をテストするための標準的なツールです。ターミナルで telnet smtp.example.com 587 というコマンドを実行します。画面が空白になるか、サーバーのグリーティングが表示されれば、ポートは開いています。connection refusedやタイムアウトのエラーが返ってきた場合は、ポートが閉じているか、ファイアウォールでブロックされています。なお、Windowsではtelnetを使う前に「Windowsの機能」で有効にする必要がある場合があります。
LinuxとmacOSでNetcat(nc)を使う
Netcatはネットワークのデバッグに役立つ強力なユーティリティです。nc -zv smtp.example.com 587 というコマンドを使います。zフラグはデータを送らずに待ち受け中のデーモンをスキャンするようnetcatに指示し、vフラグは詳細な出力を有効にします。成功した場合はポートへの接続に成功したことが明示され、失敗した場合は接続のタイムアウトまたは拒否が示されます。
WindowsでPowerShellを使う
telnetがないWindowsユーザーは、PowerShellのTest-NetConnectionコマンドレットを使えます。Test-NetConnection -ComputerName smtp.example.com -Port 587 を実行します。出力にはTcpTestSucceededのブール値が含まれます。これがTrueであれば、ポート587は開いています。ネットワーク経路に関する詳細な診断情報が得られるため、最近のWindows環境ではこの方法が推奨されます。
ブロックされたポートのトラブルシューティング
ポート587が閉じている場合は、ローカルのファイアウォール設定とISPの制限を確認してください。家庭向けISPの多くは、スパム対策として送信用のメールポートをブロックしています。SendHQやその無料ツール(https://sendhq.cc/tools)を使えば、外部から見た設定を確認し、メールサーバーがパブリックインターネットから到達可能であることを確かめられます。クラウドプロバイダーのセキュリティグループで、TCP 587の送信トラフィックが許可されていることも確認してください。
ポート587とSTARTTLSを理解する
ポート587は、メールのサブミッションに使われる標準のポートです。暗黙的TLSを使うポート465とは異なり、ポート587は平文の接続として始まり、STARTTLSコマンドで安全な接続にアップグレードします。そのため、単純なTCPチェックではポートが開いていることは確認できますが、暗号化が正しく機能していることを確認するには完全なSMTPハンドシェイクが必要です。
よく寄せられる質問
ポート25と587の違いは何ですか?
ポート25は主にサーバー間のリレーに使われ、ポート587はクライアントからサーバーへのメールのサブミッション用に指定されたポートです。
ポート587で接続がタイムアウトするのはなぜですか?
タイムアウトは通常、ファイアウォールがパケットを破棄していることを示します。ローカルOSのファイアウォール、ネットワークルーター、クラウドのセキュリティグループのルールを確認してください。
telnetで接続できれば、メールを送信できますか?
いいえ。確認できるのはTCPポートが開いていることだけです。メールを正常に送信するには、有効な認証と正しいSMTPコマンドが必要です。
ポート587は安全ですか?
ポート587は、最初の接続の確立後に通信を暗号化するSTARTTLSと組み合わせて使えば安全です。
一次情報源
- サービス名およびトランスポートプロトコルのポート番号レジストリ — IANA
- RFC 3207:トランスポート層セキュリティ(TLS)上のセキュアなSMTPのためのサービス拡張 — RFC Editor
- RFC 8314:SMTP以外のメールプロトコルにおける平文通信の扱い — RFC Editor