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で終わる応答を返します。 例えば:
250-smtp.email-messaging.com
250-8BITMIME
250-SIZE 20971520
250-STARTTLS
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250-PIPELINING
250 OKSMTPセッションを認証する
許可されたユーザーのみがNTT CPaaS SMTP APIを介してメールを送信できるようにするには、SMTP認証 を使用する必要があります。
LOGIN認証メカニズムによって認証プロセスを開始します。- 次に、
AUTH LOGINコマンドをSMTPサーバーに送信します。 - その後、サーバーはユーザー名とパスワードを順番に入力するように求め、認証が成功裏に終わると、確認が取れたことを応答します。
次の点にご留意ください:
- SMTPサーバーは、Base64でエンコードされたユーザー名のプロンプトとして
334 VXNlcm5hbWU6を応答します。Base64でエンコードされたユーザー名を入力します。 - SMTPサーバーは、Base64でエンコードされたパスワードのプロンプトとして
334 UGFzc3dvcmQ6を応答します。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 <sender_address> 0K クライアント→ RCPT TO: <recipient_address> サーバー → 250 2.1.5 Recipient <recipient_address> 0K クライアント→ RCPT TO: <blacklisted_address> サーバー → 550 5.7.1 Recipient <blacklisted_address> not allowed クライアント→ RCPT TO: <invalid_address> サーバー → 501 5.1.7 Bad recipient address ‹invalid_address› クライアント → DATA サーバー→ 354 End data with <CR><LF>.<CR><LF> | クライアント→MAIL FROM: <sender_address> クライアント→ RCPT TO: <recipient_address> クライアント→ RCPT TO: <blacklisted_address> クライアント→ RCPT TO: <invalid_address> クライアント → DATA サーバー → 250 2.1.0 Sender <sender_address> 0K サーバー → 250 2.1.5 Recipient <recipient_address> 0K サーバー → 550 5.7.1 Recipient <blacklisted_address> not allowed サーバー → 501 5.1.7 Bad recipient address <invalid_address> サーバー→ 354 End data with <CR><LF>.<CR><LF> |
新しい SMTP コマンド<CRLF>を .<CRLF> シーケンス。代わりに、セッションを終了するか、新しいメッセージトランザクションを開始する前に、メールの内容の終了を確認するサーバーの応答を待ちます。
メッセージ内容の送信
DATAコマンドを送信することで、メッセージ内容の送信をリクエストできます。以前に送信したエンベロープアドレスとすべてが一致している場合、サーバーは次のように応答します:
354 End data with <CR><LF>.<CR><LF>
サーバーからステイタスコード354の応答を受信したら、メッセージ内容のMIMEバージョン (以下「MIMEコンテンツ」) を送信できるようになります。
許容される未加工メールのMIMEメッセージの最も単純な例を以下で示します:
From: "Sender Name" <sender@example.com>
To: recipient@example.com
Subject: Simple subject
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary="example_boundary"
--example_boundary
Content-Type: text/plain; charset="utf-8"
This is the plain text content.
--example_boundary--これは、フル機能のMIME例です:
Subject: Fully Featured SMTP Example
From: "Sender Name" <sender@example.com>
Reply-To: reply-to@example.com
To: recipient_1@example.com, recipient_2@example.com
Cc: recipient_cc@example.com
Message-ID: <custom-message-id@example.com>
X-IB-Bulk-Id: 1234567890
X-IB-Tracking-Url: https://www.example.com/email/webhook/server
X-IB-Intermediate-Report: true
X-IB-Notify-Url: https://www.example.com/email/delivery/server
X-IB-Notify-Content-Type: application/json
X-IB-Callback-Data: [{"id": 1, "desc": "Callback Data Example as JSON"}]
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="example_boundary"
--example_boundary
Content-Type: text/html; charset=UTF-8
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<p>Hello world from NTT CPaaS! Happy testing :)</p>
<img src="cid:pixel_cid" alt="Pixel as the inline image">
</body>
</html>
--example_boundary
Content-Type: image/png
Content-Id: <pixel_cid>
Content-Disposition: inline; filename="pixel.png"
Content-Transfer-Encoding: base64
iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mPkT1GpBwACOQEYP+FHpAAAAABJRU5ErkJggg==
--example_boundary
Content-Type: application/octet-stream
Content-Disposition: attachment; filename="simple.pdf"
Content-Transfer-Encoding: base64
JVBERi0xLjEKMSAwIG9iajw8L1R5cGUvQ2F0YWxvZy9QYWdlcyAyIDAgUj4+ZW5kb2JqCjIgMCBvYmo8PC9UeXBlL1BhZ2VzL0tpZHMgWzMgMCBSXS9Db3VudCAxPj5lbmRvYmoKMyAwIG9iajw8L1R5cGUvUGFnZS9QYXJlbnQgMiAwIFIvTWVkaWFCb3hbMCAwIDMwMCAyMF0vQ29udGVudHMgNCAwIFIvUmVzb3VyY2VzPDwvRm9udDw8L0YwIDUgMCBSPj4+Pj4+ZW5kb2JqCjQgMCBvYmo8PC9MZW5ndGggNjM+PnN0cmVhbQpCBiAwIFRMIDAgMCAxMCAxMCAwIDAKL0YwIDEyIFRmCjI1IDAgVGQKKCJTaW1wbGUgUERGIC0gRnVsbHkgRmVhdHVyZWQgU01UUCIpIFRqCkUKZW5kc3RyZWFtCmVuZG9iago1IDAgb2JqPDwvVHlwZS9Gb250L1N1YnR5cGUvVHlwZTEvTmFtZS9GMC9CYXNlRm9udC9IZWx2ZXRpY2EvRW5jb2RpbmcvV2luQW5zaUVuY29kaW5nPj5lbmRvYmoKeHJlZgowIDYKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMTAwIDAwMDAwIG4gCjAwMDAwMDA2MDggMDAwMDAgbiAKMDAwMDAwMTcyOSAwMDAwMCBuIAowMDAwMDAxOTMxIDAwMDAwIG4gCnRyYWlsZXI8PC9Sb290IDEgMCBSL1NpemUgNj4+CnN0YXJ0eHJlZgoyMDQxCiUlRU9GCg==
--example_boundary--メッセージの終了を知らせるには、<CRLF>.<CRLF> MIME コンテンツの後。メッセージが受け入れられると、NTT CPaaS SMTP APIは 250 2.6.0 メッセージがキューに登録されました<message_id> で応答します 。
SMTPセッションを終了し、接続を閉じるには、QUITコマンドを送信します。
<message_id> は、NTT CPaaS SMTP API によって受け入れられた各メッセージに割り当てられる一意の識別子です。配信レポートを取得する場合は、<message_id> を使用して、どのレポートがどの元のメッセージに属しているかを識別します。
NTT CPaaS SMTP APIは、エンベロープ送信元ドメインと ヘッダー送信元ドメインの間で緩やかな配置チェック (ルートドメインの照合) を行います。