2011/08/14

SendGrid Free Planでテストメールを送信した話

SendGridでアカウントを作ったので、送信テストを手始めにいろいろ試してみた覚書です。

簡単にSendGridをおさらいしておくと、SendGridは米国のSMTPリレーサーバサービス、今どきのWebサービスのようにAPI完備、クリック・開封などの追跡機能、バウンス検出、着地ページ作成、メールテンプレート、送信の統計など多くの機能があり、5つの料金プランと200通/日のFree Planが選べます。

送信テスト

アカウントを開設してAccount ProvisioningもOKのメールが来たので、送信テストをしました。最初のテストなので当然SMTPで通信します。SMTP認証が必要なので、ターミナルを開けてそれ用の文字列をprintfで作っておきます。ユーザ名とパスワードはSendGridで作ったアカウントのそれです。

% printf "%s\0%s\0%s" ユーザ名 ユーザ名 パスワード | openssl base64 -e | tr -d '\n'⏎
dXNlckBzZW5kZ3JpZC5jb20AdXNlckBzZW5kZ3JpZC5jb20AcGFzc3dk

SMTP認証用文字列を作ったので、telnetでSendGridのSMTPサーバに接続します。ホスト名はDASHBOARDに書いているsmtp.sendgrid.netで25番に接続します。

% telnet smtp.sendgrid.net 25⏎
Trying 174.36.32.204...
Connected to smtp.sendgrid.net.
Escape character is '^]'.
220 mi10 ESMTP service ready
EHLO 自分のホスト名⏎
250-mi10
250-8BITMIME
250-SIZE 20480000
250-AUTH=PLAIN LOGIN
250-AUTH PLAIN LOGIN
250 STARTTLS
AUTH PLAIN dXNlckBzZW5kZ3JpZC5jb20AdXNlckBzZW5kZ3JpZC5jb20AcGFzc3dk⏎
235 Authentication successful.
MAIL FROM: <azumakuniyuki@example.jp>⏎
250 Sender address accepted
RCPT TO: <azumakuniyuki@example.org>⏎
250 Recipient address accepted
DATA⏎
354 Continue
Subject: TEST VIA SENDGRIDFrom: azumakuniyuki@example.jpTo: azumakuniyuki@example.org⏎
⏎
TEST.⏎
250 Delivery in progress
quit⏎
221 See you later
Connection closed by foreign host.

何通かテスト送信してわかったこと

telnetで接続した応答で分かる事は次の内容です。
  • 25番と587番に繋いでもSTARTTLSと出る
  • 対応しているSMTP認証方式はPLAINとLOGIN
  • 送信できるメールの最大サイズは約19.5MB

接続先のポートは587番でも同様にSMTP認証を経てメールが送信できます。寧ろOP25Bに引っかかる家庭用回線であれば最初から587番に繋いだ方がよいですね。465番は試してません。

また、SMTP認証さえ通れば、どこから接続してもどこからリレーしても、どんなFrom(エンベロープもヘッダも)でもよいみたいです。

到着したメール

テスト送信での一番の山場はSMTP認証が通るかどうか、ですがAUTH PLAINに続く文字列を投げてちゃ〜んと応答コード235が返ってきました。そしてテストメールも無事に届きました。

デフォルトでHTMLメールを有効にしていないので[?]になっていますが、これは開封確認のためのimg要素が入っている部分です。本文TESTの下のIf you'd like to ...の部分はSendGridの定型文に入っているデフォルトの購読中止用文言で、勝手に入ります。

この記事では送信者と受信者のメールアドレスに例示用のexample.{jp,org}を使っていますが、どちらも自分がDNSを管理しているドメインを使っています。特にDNSのTXTRRに設定をしなくてもSPFはpassとなっていました。

中身がJSONなヘッダ

到着したメールにはX-SendGrid-Contentd-ID: {"test_id":1313251453}という中身がJSON形式になっているヘッダがありました。が、これは謎です。SendGrid側での内部処理で使われるものか何なのか...

後は軽く試しただけですが、バウンスの検出もちゃんとやっているようで、数通バウンスさせてみたところ、一度バウンスした宛先には配信を試みないようでした。賢明な実装です。バウンス自体はSendGridのDASHBOARDで確認できる他、指定したメールアドレスにバウンスメールを転送する事も出来ます。

次に試す事

時間がとれたら次に試す事は、Sendmailにauthinfo書いてsmarthostかmailertableでリレー、添付ファイルはどうか、ウィルス付きメールはどうなる? サイズ超過(20MB以上)した場合の挙動、SMTP以外での送信(API)あたりでしょうか。

0 件のコメント:

コメントを投稿