Menu

BLOG ベアメールブログ

SMTPコマンド一覧|Telnetでメール送信をテストする方法も解説

SMTPコマンド一覧|Telnetでメール送信をテストする方法も解説

最終更新日:2026.04.06

「メールが送信できない」「エラーになる」といったトラブルの原因がわからず、対応に悩むことはありませんか? 原因の切り分けには、SMTPコマンドを使った手動でのメール送信テストが有効です。

SMTPコマンドを使って直接通信を行うことで、メール送信処理の状況を確認でき、どの段階で問題が発生しているのかを把握しやすくなります。本記事では、主要なSMTPコマンドの役割や応答コードの意味、手動でのメール送信手順について解説します。

SMTPコマンドとは

SMTPコマンドとは、メール送信に用いられるSMTPプロトコル(Simple Mail Transfer Protocol)において、クライアントがメールサーバーに対して送信する命令のことです。

SMTPでは、クライアントがコマンドを送信し、それに対してサーバーが応答コードを返す形で処理が進みます。送信者や宛先の指定、メール本文の送信といった一連の操作は、すべてSMTPコマンドによって順番に実行されます。

このようにSMTPコマンドは、メール送信の各処理を細かく制御する役割を担っています。

主要なSMTPコマンドの種類と役割一覧

SMTPコマンドには様々な種類があり、接続の開始や送信者・宛先の指定、メッセージの送信など、それぞれ異なる役割を持っています。ここでは、実際のメール送信で使われる主要なコマンドについて整理します。

接続・制御に関するコマンド

接続の開始やセッションの制御に関する主なSMTPコマンドには、以下のものがあります。これらのコマンドは、SMTPセッションの開始や状態管理に利用され、メール送信の前提となる通信の確立やリセット、終了などを制御します。

コマンド名役割
HELO/EHLO接続の宣言
NOOP疎通確認
RSETセッションの初期化
QUIT通信の終了

参考:「RFC 5321 – Simple Mail Transfer Protocol 日本語訳」https://tex2e.github.io/rfc-translater/html/rfc5321.html(2026/3/31確認)

HELO/EHLO(接続の宣言)

HELO/EHLOは、SMTPセッション開始後、クライアントが自身の識別情報(通常はドメイン名)をサーバーに通知するためのコマンドです。EHLOを使うと、サーバーから対応している拡張機能が応答として返され、利用できるようになります。

NOOP(疎通確認)

NOOPは、サーバーとの接続状態を確認するためのコマンドです。処理には影響を与えず、接続が維持されているかを確認できます。

RSET(セッションの初期化)

RSETは、現在のSMTPセッションの状態を初期化するコマンドです。これまでに指定した送信者や宛先、メッセージなどをリセットし、最初の状態からやり直すことができます。

QUIT(通信の終了)

QUITは、SMTPセッションを終了するためのコマンドです。サーバーとの接続を正常に切断します。

メール送信に関するコマンド

メール送信に関する主なSMTPコマンドには、以下のものがあります。これらは、送信者や宛先の指定、メッセージの送信といったメール送信の基本的な処理を順番に実行するために使用されます。

コマンド名役割
MAIL送信者の指定
RCPT宛先の指定
DATAメッセージの送信

参考:「RFC 5321 – Simple Mail Transfer Protocol 日本語訳」https://tex2e.github.io/rfc-translater/html/rfc5321.html(2026/3/31確認)

MAIL(送信者の指定)

MAILは、メールの送信者(エンベロープFrom)を指定するコマンドです。SMTP通信における送信元アドレスであり、バウンスメールの送信先として使用されます。

RCPT(宛先の指定)

RCPTは、メールの宛先(エンベロープTo)を指定するコマンドです。複数回実行することで、複数の宛先を指定できます。

DATA(メッセージの送信)

DATAは、メールのヘッダと本文を含むメッセージ全体を送信するコマンドです。コマンド実行後に件名などのヘッダと本文を入力します。末尾に「.(ピリオド)」のみの行を送ることでメッセージの入力が終了し、送信が完了します。

補助コマンド

補助コマンドは、メール送信の必須処理ではありませんが、アドレスの有効性やサーバーの機能の確認などに利用されるコマンドです。主な補助コマンドとして、以下が挙げられます。

コマンド名役割
VRFYアドレスの存在確認
EXPNメーリングリストの展開
HELPサポートコマンドの確認

参考:「RFC 5321 – Simple Mail Transfer Protocol 日本語訳」https://tex2e.github.io/rfc-translater/html/rfc5321.html(2026/3/31確認)

VRFY(アドレスの存在確認)

VRFYは、指定したメールアドレスがサーバー上に存在するかを確認するコマンドです。ただし、情報漏えい対策のため無効化されている場合が多くあります。

EXPN(メーリングリストの展開)

EXPNは、メーリングリストに含まれるメールアドレスの一覧を取得するコマンドです。こちらもVRFYと同様に、セキュリティ上の理由から利用できないケースが多くなっています。

HELP(サポートコマンドの確認)

HELPは、サーバーが対応しているコマンドや機能の概要を確認するためのコマンドです。利用できるコマンドの一覧などが表示されます。

SMTP拡張コマンド(ESMTP)の例

SMTPには、認証や暗号化などの機能を追加するための拡張コマンド(ESMTP)があります。現在のメール送信では、これらの拡張機能を利用した通信が一般的です。ここでは、代表的なSMTP拡張コマンドを紹介します。

拡張コマンド名役割
AUTH認証
STARTTLS暗号化通信の開始

参考:
「RFC 4954 – SMTP Service Extension for Authentication 日本語訳」https://tex2e.github.io/rfc-translater/html/rfc4954.html(2026/3/31確認)
「RFC 3207 – SMTP Service Extension for Secure SMTP over Transport Layer Security 日本語訳」https://tex2e.github.io/rfc-translater/html/rfc3207.html(2026/3/31確認)

AUTH(認証)

AUTHは、メールサーバーを利用するための認証を行うコマンドです。IDやパスワードなどの認証情報をサーバーに送信し、正当な利用者であることを確認します。認証に成功すると、サーバーのポリシーに応じてメール送信が許可されます。

SMTP-AUTHについては、以下の記事で詳しく解説しています。
SMTP-AUTHとは? SMTP認証の仕組みやセキュリティを高めるための注意点|ベアメールブログ

STARTTLS(暗号化通信の開始)

STARTTLSは、通信を暗号化するためのコマンドです。最初は平文で接続し、STARTTLSコマンド実行後にTLSハンドシェイクが行われます。その後、クライアントは再度EHLOを送信してセッションを再確立する必要があります。これにより、メールの内容や認証情報の盗聴を防ぐことができます。

STARTTLSについては、以下の記事で詳しく解説しています。
STARTTLSとは? メールのTLS暗号化の仕組みから設定・確認方法|ベアメール

SMTP応答コードの種類と意味

SMTPでは、サーバーからの返答は3桁の数字(ステータスコード)で表されます。コードの先頭の数字によって、処理の結果やサーバーの状態を判断できます。ここでは、主な分類とその意味を解説します。

応答コードの分類意味
2xx成功
3xx追加の入力が必要
4xx一時的なエラー
5xx恒久的なエラー

参考:「RFC 5321 – Simple Mail Transfer Protocol 日本語訳」https://tex2e.github.io/rfc-translater/html/rfc5321.html(2026/3/31確認)

SMTPステータスコードについては、以下の記事で詳しく解説しています。
メールのエラーコード(SMTPステータスコード)の意味と対策|ベアメールブログ

2xx(成功)

コマンドが正常に受け付けられ、処理が完了したことを示すコードです。サーバーは次のコマンドを受け付ける状態になっています。例えば「250 OK」は、問題なく処理が進んでいることを意味します。

3xx(追加の入力が必要)

コマンドは受け付けられているが、処理を完了するために追加の入力が必要な状態を示すコードです。例えば「354」は、メッセージの入力を続けるよう促す応答であり、そのまま処理を続行できます。

4xx(一時的なエラー)

一時的な問題により、処理が完了できなかったことを示すコードです。サーバーの過負荷やメンテナンス、ネットワークのトラブルなどが原因となることが多く、時間を置いて再試行すると成功する可能性があります。

5xx(恒久的なエラー)

コマンドの構文エラーや無効な宛先など、恒久的な問題により処理が失敗したことを示すコードです。この場合、再試行しても解決しないため、設定や入力内容を見直す必要があります。

SMTPコマンドを使って手動でメールを送信する方法

SMTP通信に問題が発生している場合、アプリケーションの設定やネットワーク、メールサーバー側の制御など、複数の要因が考えられます。手動でSMTPコマンドを実行することで、どの層に問題があるのかを判断することができます。

本章では、Telnetを使用してSMTPコマンドを実行し、実際にメールを送信する基本的な手順を紹介します。

ステップ1:サーバーへ接続

まずは、コマンドプロンプトやターミナルを開き、接続先SMTPサーバーのホスト名とポート番号を指定して接続します。接続が成功すると、サーバーから「220」で始まる応答が返されます。

telnet smtp.example.com 25
220 smtp.example.com ESMTP Postfix

このような応答が表示されれば、サーバーとの接続が確立され、SMTP通信を開始できる状態になっています。接続できない場合は、ポート接続やネットワーク設定に問題がある可能性があります。

ステップ2:送信者・宛先を指定

EHLOでクライアントのホスト名(通常はFQDN ※)を指定してサーバーに通知し、SMTP通信を開始します。続いて、MAIL FROMで送信者、RCPT TOで宛先を指定します。各コマンドごとにサーバーの応答を確認しながら、順番に入力していきます。

EHLO example.com
250-smtp.example.com
250-PIPELINING
250-SIZE 10240000
250-STARTTLS
250 AUTH PLAIN LOGIN

MAIL FROM: <sender@example.com>
250 2.1.0 Ok

RCPT TO: <recipient@example.com>
250 2.1.5 Ok

各コマンドに対して「250」などの応答が返されれば、正常に受け付けられています。途中でエラーが返ってくる場合は、その時点の設定や入力内容に問題があると考えられます。

※FQDN(Fully Qualified Domain Name):ホスト名からトップレベルドメインまでを省略せずに記述した完全修飾ドメイン名(例:mail.example.com)

ステップ3:メッセージを送信

宛先の指定まで完了したら、DATAコマンドを実行します。「354」の応答が返ってきたら、件名を入力し、1行空けてから本文を入力します。サーバーの応答を確認しながら、順番に入力していきます。最後に改行したうえで「.(ピリオド)」のみの行を送ると、本文の入力が終了し、メールが送信されます。

DATA
354 End data with <CR><LF>.<CR><LF>

Subject: Test mail

This is a test mail.
.
250 2.0.0 Ok: queued as 123456789

QUIT
221 2.0.0 Bye

このようにサーバーから「250」の応答が返されれば、正常に受け付けられています。

最後にQUITを実行すると、SMTPセッションが終了します。サーバーから「221」が返されれば、正常に切断されています。

SMTPコマンドでメール送信が失敗する主な原因

SMTPコマンドによる手動送信では、コマンドの形式や認証方式、通信環境などの要因によりエラーが発生することがあります。ここでは、メール送信が失敗する主な原因と確認ポイントを解説します。

コマンドの記述ミス

コマンド名のスペルミスや不要な空白、改行位置の誤りなどがあると、サーバーに正しく認識されずエラーとなります。入力内容は正確に確認しましょう。

SMTP認証(AUTH)が必要な環境

多くのメールサーバーでは、SMTP認証(AUTH)を行わないとメール送信が許可されません。AUTHコマンドを実行せずに送信を試みると、認証エラーとなる場合があります。

また、現在はセキュリティ上の理由から、STARTTLSによる暗号化通信を確立した後にのみAUTHを許可する設定が一般的です。そのため、暗号化せずにAUTHを実行しようとすると、「STARTTLSが必要」といったエラーで拒否されるケースもあります。

手動でテストする際は、認証に必要なID・パスワードに加えて、認証の実行手順やSTARTTLSの有無も確認しておきましょう。

STARTTLS(暗号化通信)が必要な環境

平文での通信を許可せず、STARTTLSによる暗号化を必須としているサーバーも多く存在します。この場合、EHLO応答でSTARTTLSが提示されていても、暗号化を行わずに処理を進めるとエラーとなります。

なお、TelnetはTCP接続と文字列送受信のみを行うツールであり、STARTTLS後のTLSハンドシェイクには対応していません。そのため、STARTTLSが必須の環境では、Telnetでは途中までしか確認できず、メール送信や認証の検証は行えません。暗号化通信を含めて確認する場合は、openssl s_clientなどのツールを利用する必要があります。

OP25Bによる接続制限

インターネット接続環境によっては、OP25Bで外部のSMTPサーバーに対する25番ポートの通信が制限されている場合があります。この場合、25番ポートでのSMTP接続自体ができず、手動送信も実行できません。

代替として587番ポートなどを利用する方法がありますが、STARTTLSによる暗号化やSMTP認証が前提となることが一般的です。TelnetはTLS通信に対応していないため、接続できても送信や認証まで進めない場合があります。暗号化通信の確認には、openssl s_clientなどのツールを利用しましょう。

OP25Bについては、以下の記事で詳しく解説しています。
メール送信規制「OP25B」とは? 25番ポートブロックの概要と回避策|ベアメールブログ

まとめ

本記事では、SMTPコマンドの役割や応答コードの意味、コマンドを使って手動でメールを送信する方法について解説しました。これらを理解しておくことで、どの段階で問題が発生しているかを把握しやすくなります。

ただし、認証や暗号化の要件により手動での検証が最後まで行えない場合がある点には注意が必要です。また実際のメール配信では、送信元の評価や迷惑メール判定など、SMTPコマンドだけでは制御・改善できない要素も多く存在します。

こうした課題に対応するためには、配信環境そのものを見直し、安心してメールを届けられる仕組みを整えることが重要です。ベアメールの「メールリレーサービス」では、既存の環境からリレーするだけで、高い到達率と安定した配信を実現できます。メール配信に関する課題をお持ちの方は、ぜひお気軽にご相談ください。

ベアメール メールリレー|到達率を改善するSMTPリレーサービス