NTT CPaaS SMTP APIとの連携のセットアップ
NTT CPaaS SMTP APIと連携するためのプロセスは、以下のステップで構成されています:
- セキュアな接続を開く -NTT CPaaS SMTPサーバーへのセキュアな接続を確立します。
- 新しいSMTPセッションを開始する - メールの送信プロセスを開始する新しいセッションを立ち上げます。
- SMTP接続を認証する - 接続を認証してSMTPサーバーにアクセスするための資格情報を入力します。
- エンベロープを定義する - 送信者と受信者のメールアドレスを指定して、メールエンベロープをセットアップします。
- メッセージのコンテンツを送信する - SMTPサーバーを介してメールのコンテンツを送信し、受信者にメッセージを配信します。
次のセクションでは、各ステップについて個別に詳しく説明します。
セキュアな接続を開く
opensslを使って、smtp-api.infobip.com への新しいSMTP接続を開始します。ポート587に接続し、コマンドプロンプトで次のように入力して、セキュアな接続をリクエストします:
openssl s_client -connect smtp-api.infobip.com:587 -starttls smtp -quiet
-quietオプションを使用すると、入力する内容に特殊文字が含まれている場合でも接続は開いたままにしておけます。例えば、Q という文字が含まれている入力の場合、このオプションを使用しないと、接続は閉じられてしまいます。
このコマンドで問題が発生した場合は、-crlfオプションを試してみてください。このオプションを使用すると、Enterキーを押した際に強制的に改行されます。一部のサーバーでは、これが必要になる場合があります。
例えば:
openssl s_client -crlf -connect smtp-api.infobip.com:587 -starttls smtp -quiet
サーバーは、証明書に関する情報を含む、末尾が250 OKで終わる応答を返します。
新しいSMTPセッションを開始する
EHLOコマンドを使ってクライアントをNTT CPaaSのSMTPサーバーに接続し、ESMTPセッションを開始します。このコマンドにより、サーバーはサポートされているSMTP拡張機能の一覧を返すよう促されます:
EHLO <client_hostname>
NTT CPaaSのSMTPサーバーは、サポートされているSMTP拡張機能の一覧を含む、末尾が250 OKで終わる応答を返します。 例えば:
SMTPセッションを認証する
許可されたユーザーのみがNTT CPaaS SMTP APIを通じてメールを送信できるようにするには、SMTP認証を使用する必要があります:
LOGIN認証方式によって認証プロセスを開始します。- 次に、
AUTH LOGINコマンドをSMTPサーバーに送信します。 - その後、サーバーからユーザー名とパスワードを順に入力するよう求められ、認証が成功すると確認メッセージが表示されます。
次の点にご留意ください:
- SMTPサーバーから、
334 VXNlcm5hbWU6という応答が返されます。これは、ユーザー名を入力するよう促すBase64エンコードされたプロンプトですので、Base64でエンコードされたユーザー名を入力します。 - SMTPサーバーから、
334 UGFzc3dvcmQ6という応答が返されます。これは、パスワードを入力するよう促すBase64エンコードされたプロンプトですので、Base64でエンコードされたパスワードを入力します。
ユーザー名とパスワードの認証情報が有効な場合、NTT CPaaSのSMTPサーバーは235 2.7.0 Authentication successfulと応答します。
エンベロープを定義する
認証が完了したら、送信者と受信者のアドレスを指定して エンベロープ を定義します:
- 送信者アドレスを指定するには、
MAILコマンドを使用します:MAIL FROM: <sender_address> - 必要に応じて、
MAILコマンドにSIZEパラメーターを含めることで、メッセージのサイズをバイト単位で宣言することもできます:MAIL FROM: <sender_address> SIZE=number_of_bytes(バイト数) SIZEパラメーターを使用すると、サーバーはメッセージを処理できるかどうかを即時に確認します。メッセージのサイズが許容上限を超えている場合、サーバーはメッセージが大きすぎると応答します。SIZEパラメーターを含めない場合、この確認は後ほど、DATAコマンドの実行中に実際のメッセージのコンテンツに基づいて行われます。- 送信者が受け入れられると、NTT CPaaSのSMTPサーバーは
250 2.1.0 Sender <sender_address> OKと応答します。 - 受信者を指定するには、
RCPTコマンドを使用します:RCPT TO: <recipient_address> - 受信者が複数いる場合は、受信者ごとに
RCPTコマンドを繰り返します。 - 受信者が受け入れられると、NTT CPaaSのSMTPサーバーは
250 2.1.5 Recipient <recipient_address> OKと応答します。 - エンベロープアドレスを正常に送信したら、
DATAコマンドを使ってメッセージのコンテンツを送信したいことを告げるプロセスに進みます。
SMTPトランザクションあたりの受信者数は、最大1000人に制限されています。
コマンドのパイプライン処理
NTT CPaaSのSMTPサーバーは、コマンドのパイプライン処理をサポートしています。
パイプライン処理をせずにSMTPコマンドを使用する場合、クライアントとサーバー間のやり取りはリクエスト・レスポンスのサイクルに従います。クライアントは、各コマンドの実行後にサーバーからの応答を待ってから、次のコマンドを送信する必要があります。
パイプライン処理を行うと、クライアントは、各コマンドに対するサーバーの応答を待たずに、MAIL、RCPTとDATAコマンドを同時に送信することができます。このアプローチを取れば、トランザクションあたりの往復回数と遅延を大幅に削減できます。またサーバーは、送信された各コマンドやアドレスに対して、明確でわかりやすい応答を返すようになります。
以下の例は、パイプライン処理を行わない場合と行った場合のコマンドの順序とサーバーからの応答をそれぞれ示しています。
パイプラインなし | パイプラインあり |
|---|---|
| クライアント → MAIL FROM: <sender_address> サーバー → 250 2.1.0 送信者 <sender_address> 0K クライアント → RCPT TO: <recipient_address> サーバー → 250 2.1.5 受信者 <recipient_address> 0K クライアント→RCPTは: <blocklisted_address> サーバー → 550 5.7.1 許可されない受信者 <blocklisted_address> クライアント → RCPT TO: <invalid_address> サーバー → 501 5.1.7 正しくない受信者アドレス ‹invalid_address› クライアント → DATA サーバー→ 354 <CR><LF>.<CR><LF>でデータ終了 | クライアント → MAIL FROM: <sender_address> クライアント → RCPT TO: <recipient_address> クライアント→RCPTは: <blocklisted_address> クライアント → RCPT TO: <invalid_address> クライアント → DATA サーバー → 250 2.1.0 送信者 <sender_address> 0K サーバー → 250 2.1.5 受信者 <recipient_address> 0K サーバー → 550 5.7.1 許可されない受信者 <blocklisted_address> サーバー → 501 5.1.7 正しくない受信者アドレス <invalid_address> サーバー→ 354 <CR><LF>.<CR><LF>でデータ終了 |
<CRLF>.<CRLF>シーケンスの直後に新しいSMTPコマンドのパイプライン処理は行わないでください。代わりに、メールのコンテンツの終了を確認するサーバーからの応答を待ってから、セッションを終了するか、新しいメッセージのトランザクションを開始するようにしてください。
メッセージのコンテンツの送信
DATAコマンドを送信することで、メッセージ内容の送信をリクエストできます。以前に送信したエンベロープアドレスとすべてが一致している場合、サーバーは次のように応答します:
354 <CR><LF>.<CR><LF>でデータ終了
サーバーからステイタスコード354の応答を受信したら、メッセージのコンテンツのMIMEバージョン (以下「MIMEコンテンツ」) を送信できるようになります。
受け入れ可能な未加工メールのMIMEメッセージの最も単純な例を以下に示します:
これは、フル機能のMIME例です:
MIMEコンテンツの後に<CRLF>.<CRLF>を付けて送信すると、 そこでメッセージが終了することを知らせることができます。そのメッセージが受け入られたら、NTT CPaaS SMTP APIは、250 2.6.0 Message queued as <message_id>と応答します。
SMTPセッションを終了し、接続を閉じるには、QUITコマンドを送信します。
<message_id>は、NTT CPaaS SMTP API によって受け入れられた各メッセージに割り当てられる一意の識別子です。配信レポートを取得する際、<message_id>を使って、どのレポートがどのメッセージに対応しているかを特定することができます。
NTT CPaaS SMTP APIは、エンベロープのFromドメインと ヘッダーのFromドメインの間で簡易的な整合性確認 (ルートドメインの照合) を行います。