SMTP設定は、メールサーバー(またはメールクライアント)をセットアップして、Simple Mail Transfer Protocolを使用してメッセージを正しく送信するプロセスです。正しく設定すれば、メールはインボックスに届きます。間違えると、配信失敗、認証エラー、またはメッセージがスパムフォルダに静かに入ることになります。毎回確実に設定する必要のある3つのことは、正しいポート、正しい暗号化方法、そして機能する認証認証情報です。
目次
SMTPが実際にすること
SMTPは、メールクライアントまたはアプリケーションが送信メッセージをメールサーバーに渡すために使用するプロトコルです。メールサーバーはそれらを受信者に向かってルーティングします。送信側のみを処理します。メール受信は別のプロトコルで処理されます:IMAP(同期用)またはPOP3(ダウンロード用)。
「送信」をクリックすると、クライアントはSMTPサーバーへのTCP接続を開き、認証し、メッセージを渡し、切断します。サーバーは同じプロトコルを使用してそのメッセージを受信者のメールサーバーに配信しようとし、宛先のMX(メールエクスチェンジ)DNSレコードを検索して、どこに送信するかを確認します。
SMTPはRFC 5321で定義されています。これは元のRFC 2821に代わるものです。仕様を理解することは、生のSMTP会話をデバッグするか、サーバーをゼロから設定する必要があるときに役立ちます。
SMTP ポートの説明:25、465、587
SMTP設定で遭遇する3つのポートがあります。それぞれが特定の役割を持っており、間違ったポートを使用することは、メール配信失敗の最も一般的な原因の1つです。
| ポート | 名前 | 暗号化 | 一般的な用途 |
|---|---|---|---|
| 25 | SMTP | なし(またはSTARTTLS) | サーバー間リレー(MTA対MTA) |
| 465 | SMTPS | 暗黙的なSSL/TLS | レガシークライアント送信(古いアプリ) |
| 587 | 送信 | STARTTLS(明示的なTLS) | 認証済みクライアントメール送信 |
ポート25対587:どちらを使うべきか?
ポート25は1982年に定義された元のSMTPポートです。これは、エンドユーザーがメールを送信するためではなく、互いに通信するメールサーバー向けに設計されました。ほとんどのISPとクラウドプロバイダーは、スパムを防ぐために、住宅と共有ホスティングIPからの送信ポート25をブロックしています。メールを送信するアプリケーションを実行している場合、ポート25を使用しようとするとほぼ確実に失敗します。
ポート587はクライアントまたはアプリケーションからメールを送信するための正しい選択肢です。RFC 6409で専用の「メッセージ送信」ポートとして標準化されました。STARTTLSが必要です。つまり、接続は暗号化されていない状態で開始され、認証情報が送信される前にTLSにアップグレードされます。これはGmail、Outlook、およびほぼすべての最新のメールプロバイダーが使用することを期待しているものです。
SMTPポート465:SSLレガシーポート
ポート465は珍しい歴史を持っています。1997年に一度SMTPS(SMTP over SSL)に割り当てられましたが、1998年にSTARTTLSがポート587で推奨されるアプローチになったときに割り当てが取り消されました。公式に廃止されたにもかかわらず、多くのメールサーバーはそれをサポートし続けており、後にIANAによって別の目的で再登録されました。
実際には、ほとんどのプロバイダーは依然としてポート465での暗黙的なSSL/TLSを使用した接続を受け入れます。これはSTARTTLSのようにミッドハンドシェイクでアップグレードするのではなく、TLSが最初のバイトから接続全体をラップすることを意味します。一部の古いアプリケーションとハードウェア(特定のネットワークプリンター、レガシーCRM)はポート465のみをサポートしているため、それらのケースでは有用なままです。
- アプリケーションまたはデバイスが暗黙的なSSLを特に必要とし、STARTTLSができない場合はポート465を使用してください。
- 他のすべてのポート587を使用します。これは最新の標準です。
- クライアント送信のためにポート25を完全に避けてください。
SMTP認証:どのように機能するか
SMTP認証(SMTP AUTHと書かれることが多い)はRFC 4954で定義されています。サーバーが送信メールを受け入れる前に、クライアントがそのアイデンティティを証明する必要があります。それなしに、サーバーに到達できる誰でもそれを使用してスパムを送信できるため、オープンリレーは深刻なセキュリティ問題として扱われます。
SMTP設定で見る最も一般的な認証メカニズムは次のとおりです:
- PLAIN:ユーザー名とパスワードをbase64エンコードして送信します。暗号化された接続(TLSが最初にアクティブである必要があります)でのみ安全です。
- LOGIN:PLAINに似ていますが、ユーザー名とパスワードを別々の交換として送信します。TLSも必要です。
- CRAM-MD5:パスワードを直接送信することを避けるチャレンジレスポンスメカニズム。最新のサーバーではあまり一般的ではありません。
- XOAUTH2:Gmailおよびその他のGoogle Workspaceアカウントで使用されます。パスワードの代わりに、OAuth 2.0アクセストークンを提供します。これは「安全性の低いアプリアクセス」が無効になっているときに必要なものです。
メールサーバーセットアップ ステップバイステップ
Thunderbirdのようなメールクライアント、トランザクションメールを送信するWebアプリ、または自己ホストされたメールサーバーを設定しているかどうかにかかわらず、プロセスは同じ論理的なシーケンスに従います。
メールクライアントとアプリケーションの場合
-
プロバイダーからSMTPホスト名を取得します。例:
smtp.gmail.com、smtp.office365.com、mail.yourdomain.com。 - 正しいポートを選択します。デフォルトとしてSTARTTLSを使用してポート587を使用します。アプリがそれを必要とする場合は、SSLのみでポート465にフォールバックします。
- 認証認証情報を入力します。これは通常、ユーザー名としてのフルメールアドレスとパスワードまたはアプリパスワードです。
- 暗号化方法を設定します。ポートと一致させます:587にはSTARTTLS、465にはSSL/TLS。
- 接続をテストします。ほとんどのメールクライアントには、「アカウント設定をテスト」または「確認」ボタンがあります。保存する前に使用してください。
自己ホストされたメールサーバー(Postfixの例)
Postfixを使用して独自のサーバーを実行している場合、コアSMTP設定は
/etc/postfix/main.cf
に存在します。サードパーティのSMTPプロバイダーを通じてリレーするサーバーの最小限の実装例を次に示します:
# /etc/postfix/main.cf - Basic relay configuration
relayhost = [smtp.sendgrid.net]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_use_tls = yes
編集後、
/etc/postfix/sasl_passwd
を認証情報で作成し、
postmap /etc/postfix/sasl_passwd
を実行してハッシュしてから、
systemctl reload postfix
でPostfixをリロードします。
chmod 600 /etc/postfix/sasl_passwd
および
chmod 600 /etc/postfix/sasl_passwd.db
を実行してファイルを作成した後。読み取り可能な認証情報ファイルは一般的なサーバーの設定ミスです。一般的なプロバイダーの一般的なSMTP設定
| プロバイダー | SMTPホスト | ポート | 暗号化 | 認証に関する注記 |
|---|---|---|---|---|
| Gmail | smtp.gmail.com | 587 | STARTTLS | アプリパスワードまたはOAuth2を使用 |
| Gmail(代替) | smtp.gmail.com | 465 | SSL/TLS | アプリパスワードまたはOAuth2を使用 |
| Microsoft 365 | smtp.office365.com | 587 | STARTTLS | 最新の認証またはアプリパスワード |
| Yahoo Mail | smtp.mail.yahoo.com | 465 | SSL/TLS | アプリパスワードが必要 |
| Zoho Mail | smtp.zoho.com | 587 | STARTTLS | ユーザー名としてのフルメール |
| Amazon SES | email-smtp.us-east-1.amazonaws.com | 587 | STARTTLS | IAM SMTP認証情報 |
SMTP接続の問題のトラブルシューティング
ほとんどのSMTP障害は少数のカテゴリーに分類されます。ログを掘り下げる前に、ポートが実際にサーバーまたはネットワークから到達可能かどうかを確認してください。ファイアウォールまたはISPブロックが原因であることが多く、特別なツールがなくても迅速に確認できます。
メールサーバーでSMTPポートが開いているかどうかは、無料のオンラインポートチェッカーを使用して確認できます。メールサーバーのホスト名またはIPを入力し、ポート25、465、または587を選択して、テストを実行します。結果が閉じているか、タイムアウトとして戻ってくる場合、問題はネットワークレベル(ファイアウォール、ISPブロック、またはサービスが実行されていない)であり、アプリ内の設定エラーではありません。
一般的なエラーメッセージとその意味
- 接続が拒否されました/接続がタイムアウトしました:ポートがブロックされているか、サービスがリッスンしていません。ファイアウォールルールを確認し、SMTPデーモンが実行されていることを確認してください。
- 535認証失敗:ユーザー名またはパスワードが間違っています。Gmailの場合、これは通常、アカウントパスワードではなくアプリパスワードが必要であることを意味します。
- 550 5.7.1リレーアクセスが拒否されました:サーバーはその送信者アドレスのメールをリレーするように設定されていないか、MAIL FROMコマンドの前に認証が行われませんでした。
- 421接続が多すぎます:受信サーバーがレート制限しています。送信頻度を減らすか、遅延を伴うキューを実装してください。
- TLSハンドシェイク失敗:証明書の不一致または古いTLSバージョン。サーバーのSSL証明書が有効であることを確認し、ほとんどのプロバイダーが無効にしているTLS 1.0または1.1の使用を試みていないことを確認してください。
クイック診断チェックリスト
- SMTPポートが開いていて、送信環境から到達可能であることを確認してください。
- ホスト名が
nslookup smtp.yourdomain.comで正しく解決されることを確認してください。 - MXToolbox Blacklist Checkなどのツールを使用して、送信IPがブロックリストに含まれていないことを確認してください。
- SPF、DKIM、DMARCのDNSレコードが正しく公開されていることを確認してください。欠落または破損したレコードにより、正当なメールが拒否されたり、ジャンク化されたりします。
- メールサーバーログを確認してください。Postfixの場合は、
/var/log/mail.logを確認してください。ログの実際のSMTPレスポンスコードは、リモートサーバーが何を拒否したかと理由を正確に示しています。
SMTPポートは実際に開いていますか?
SMTPの設定を非難する前に、問題がブロックされたポートではないことを確認してください。当社の無料ポートチェッカーを使用すると、任意のメールサーバーでポート25、465、または587を即座にテストできるため、ファイアウォールの問題に対処しているか、設定エラーかどうかがわかります。
SMTPポートを今すぐ確認してください→
ポート465は暗黙的なSSL/TLSを使用します。つまり、接続全体が最初から暗号化されています。ポート587はSTARTTLSを使用します。これは平文接続として開始され、認証情報を送信する前にTLSにアップグレードされます。どちらも正しく設定されている場合は安全ですが、ポート587はクライアントメール送信に推奨される最新の標準です。アプリケーションが特に暗黙的なSSLを必要とし、STARTTLSをサポートできない場合にのみ465を使用してください。
ポート25は、ほとんどの住宅および共有ホスティングネットワークでブロックされています。これは、侵害されたマシンからスパムを直接送信するために歴史的に使用されていたためです。送信ポート25をブロックすることで、ISPとクラウドプロバイダー(デフォルトではAWS EC2を含む)は、スパムソースとして使用されているIPレンジを防止します。アプリケーションからメールを送信する場合は、ポート587を使用してください。ポート25がサーバー間リレーのために開く必要がある正当なメールサーバーを実行している場合は、通常、プロバイダーにブロックを解除するよう要求する必要があります。
ほとんどの場合、SMTPユーザー名はフルメールアドレスです。例えば
you@yourdomain.com
。古いシステムの中には、@記号の前のローカル部分のみを使用するものがあります。Amazon SESなどのサービスの場合、ユーザー名はメールアドレスではなく、別のIAM生成SMTP認証情報です。特定のプロバイダーのドキュメントを常に確認してください。2要素認証が有効になっているGmailまたはOutlookを使用する場合は、通常のアカウントパスワードの代わりにアプリ固有のパスワードを生成する必要があります。
複数のレベルでテストできます。まず、ポートチェッカーツールを使用するか、サーバーから
telnet smtp.yourdomain.com 587
を実行して、SMTPポートに到達可能であることを確認します。ポートが開いている場合は、
openssl s_client -starttls smtp -connect smtp.yourdomain.com:587
を使用して完全なSMTPハンドシェイクをテストできます。これはTLS証明書を表示し、生のSMTPコマンドを入力できます。実際のインボックスに配信せずにエンドツーエンドのテストを行うには、Mailtrapなどのサービスを使用してください。これはSMTP接続を受け入れ、それを転送せずにメッセージを表示します。
成功したSMTP認証は、サーバーの使用が許可されていることを証明するだけです。スパムフィルタリングは受信側で個別に行われ、複数の要因の組み合わせに基づいています:送信IPがブロックリストに登録されているかどうか、SPFレコードがそのIPがドメインに対して送信を承認しているかどうか、DKIM署名が有効でDNSレコードと一致しているかどうか、およびDMARC ポリシーが公開されているかどうか。欠落または破損したSPFレコードだけでも、GmailまたはOutlookがメッセージをジャンク化するのに十分です。3つのDNSレコードをすべて確認し、送信IPの評判を確認してください。
はい、ただし制限があります。Gmailの SMTPサーバー(ポート587の
smtp.gmail.com
)は、Gmailアカウントとして認証されたメールを送信します。「From」アドレスをカスタムドメインに表示したい場合は、Gmailの設定の「次のアドレスとして送信」で、そのアドレスを追加し、所有権を確認する必要があります。ただし、Gmailは一部のメールクライアントで表示される「gmail.com経由で送信」という注釈を追加します。独自のドメインを使用したクリーナーなセットアップの場合、Amazon SESなどのトランザクションメールプロバイダーまたは専用のSMTPリレーを使用する方が、長期的には優れた選択肢です。