2015-08-20

SendGrid触ってみた【メール送信編】

メールサービスのSendGridを触ってみました。今回はSendGridのメール送信の機能について書いていきます。

SendGridでメールを送信するにはSMTPを使うSMTP APIとHTTPを使うWeb APIの2つの方法があります。

SMTP APIで送信

SMTPのプロトコルを使ってSendGridに情報を伝達する方式で、X-SMTPAPIという独自ヘッダを使うことで送信メールのカテゴリやトラッキング用の任意の属性をセットしたり、受信者に応じたパーソナライズをすることができます。X-SMTPAPI以外は通常のSMTPを使ったメール送信になるので、OutlookやThunderbird等の任意のメーラーを使ったメール送信ができるのが利点です。

SMTPのホストには"smtp.sendgrid.net"、ポート番号は25, 465, 587が利用可能です。ユーザ名、パスワードはSendGridのクレデンシャルをそれぞれ設定するだけでOKです。詳細はリファレンスを参照。

X-SMTPAPIヘッダについて

送信するメールの属性値をセットしたり受信者に応じたパーソナライズをすることができるSendGridのSMTP独自拡張ヘッダになります。ヘッダの値は以下のようなJSONになります。

{
    "category": [
        "HogeCategory"
    ],
    "unique_args": {
        "hoge_key": "fuga_value"
    },
    "sub": {
        "%key%": [
            "hello"
        ]
    },
    "send_at": 1439813847
}

この場合は送信するメールのカテゴリを"HogeCategory"、トラッキング用の変数としてHOGE_KEY=fugavalue、本文に"%key%"という文字列があれば"hello"に置き換えて、unixtimestampで1439813847の時間になったらメールを送信する、という設定になります。 X-SMTPAPIのリファレンスはこちら

ちなみにWeb APIでもX-SMTPAPIの設定をすることが可能です。

SMTP APIのサンプル

Python+SMTP APIで送信してみます。PythonのSendGrid SMTP APIのライブラリであるsendgrid/smtpapi-pythonを使います。X-SMTPAPIヘッダのJSON生成を補助してくれるライブラリになります。サンプルは以下になります。

from smtpapi import SMTPAPIHeader
import smtplib
from email.MIMEText import MIMEText
import time

host = 'smtp.sendgrid.net'
port = 587
user = '******@kke.com'
passwd = '******'

server = smtplib.SMTP(host, port)
server.set_debuglevel(1)
server.starttls()
server.login(user, passwd)

# building base SMTP values
from_addr = 'hoge@example.com'
to_addrs = ['fuga@hogehoge.com']

body = 'Test Body %key%'
message = MIMEText(body)
message['From'] = from_addr
message['To'] = ",".join(to_addrs)
message['Subject'] = 'Test Subject'

# building X-SMTPAPI header
header = SMTPAPIHeader()
header.add_category('HogeCategory')
header.add_substitution('%key%', 'hello')
header.add_unique_arg('hoge_key', 'fuga_value')
header.set_send_at(int(time.time()+60))
message['X-SMTPAPI'] = header.json_string()

server.sendmail(from_addr, to_addrs, message.as_string())
server.quit()

Web APIで送信

HTTPで送信する方式になります。以下のようなHTTPリクエストを投げることでメールを送信できます。

$ curl -X POST https://api.sendgrid.com/api/mail.send.json \
 -d api_user=****@kke.com \
 -d api_key=****** \
 -d to=to@example.com \
 -d subject=HogeSubject \
 -d text=TextBody \
 -d from=from@example.com \
 -d headers={"X-HogeHoge":"FugaFuga"}

リファレンスにPlay Groundもあるので、確認する際はそちらでリクエスト/レスポンスを確認するのが楽です。

また、ファイルを添付する場合は、multipart/form-data形式で送信する必要があります。

このエントリーをはてなブックマークに追加