blastengineはエンジニアフレンドリーなメール配信サービスです。APIとSMTPリレーの両方をサポートしており、手軽に素早くメール配信ができるようになっています。
今回はPythonでblastengineのAPIを簡単に使えるSDKを開発しましたので、使い方を紹介します。現在はトランザクションメール(即時発信メール)とバルクメール(一括配信)をサポートしています。今回は一括配信する際に大量の宛先を指定する方法を解説します。
インストール
インストールはpipコマンドで行ってください。
pip3 install blastengine
インポート
クライアントとバルクをインポートします。
from blastengine.Client import Blastengine
from blastengine.Bulk import Bulk
初期化
Blastengineを初期化します。ユーザ名とAPIキーを使います。
# 初期化
Blastengine('USER_NAME', 'API_KEY')
メールオブジェクトの用意
バルクメールは Bulk
を使います。件名やテキスト本文などを指定します。 __name__
となっているのは、配信先ごとに置き換えられる文字列になります。
# バルク(一括発送)メールオブジェクトの作成
bulk = Bulk()
# 情報を適用する
bulk.subject('メールの件名')
# __name__ は置き換えられる文字列
bulk.text_part('テキスト本文 __name__')
# 2つ目の引数(名前)はなくても大丈夫です
bulk.fromAddress('info@example.jp', '管理者')
添付ファイルの追加
添付ファイルは attachments
メソッドで、ファイルのパスを指定してください。
# 添付ファイルがある場合
bulk.attachments('./test.py')
bulk.attachments('./image.png')
一度保存する
このメールテンプレートができた段階で一度保存します。
try:
bulk.begin()
except Exception as e:
# APIエラー
print(e)
少数の宛先を設定する
次に宛先を設定します。この時、置き換え文字列を設定できます。この方法では50件まで指定できます。51件目を指定すると、Exceptionエラーが発生します。
bulk.to('user1@example.com', [{
'__name__': 'User1'
}])
bulk.to('user2@example.com', [{
'__name__': 'User2'
}])
宛先を設定したら、保存を行います。保存すると宛先のリストはリセットされます。
bulk.update()
大量の宛先を設定する
大量の宛先を指定する場合にはCSVアップロードを使います。テンプレートはこちらからダウンロードできます。
email,__prop1__,__prop2__,__prop3__
test@example.jp,テスト,テスト太郎,20200101
sample1@example.com,サンプル,サンプル次郎,20210101
このファイルをBulkクラスのcsv_importで指定します。そうするとJobオブジェクトが返ってきます。
job = bulk.csv_import('./example.csv')
print(job.job_id)
# => 50
このCSVアップロードは非同期で処理されますので、完了まで待ちます。
while job.finished() == False:
print(job.status) # => STARTED
# 処理待ち
time.sleep(5)
完了したら、取り込みエラーがあったかを確認できます。
print(job.total_count)
# => 200
print(job.success_count)
# => 198
print(job.failed_count)
# => 2
もしエラーがあれば、その原因を記したファイルをダウンロードできます。この内容はZipコンテンツなので、ダウンロード先のファイル名は .zip
にしておくのが良いでしょう。
job.download_error_file('result.zip')
# => True
例えば以下のようなエラーが書かれています。
"エラーメッセージ","email","__prop1__","__prop2__","__prop3__"
"[email: [sample1@example: 無効なEメールアドレス形式です。]]","sample1@example","サンプル","サンプル次郎","20210101"
送信
送信は send
メソッドになります。返値はデリバリーIDになります。このデリバリーIDで、メールの送信状況や配信停止などを行います。
try:
# 送信
delivery_id = bulk.send()
print(delivery_id)
print(bulk.delivery_id) # こちらも可
except Exception as e:
# APIエラー
print(e)
配信状況を知る
もし配信状況が知りたい場合には get
メソッドを実行してください。これでメールの配信状況を取得します。すでに配信予約になっていると RESERVE といった文字列が返ってきます。
bulk.get()
print(bulk.status)
# => RESERVE
まとめ
Python SDKを使えばWebアプリケーションはもちろん、機械学習やIoTと組み合わせてblastengineを活用してもらえます。バルクメールは大量の宛先に対して一括配信を行うのに便利です。50件を超える宛先を指定する場合にはCSVアップロードを活用してください。
ぜひblastengineのPython SDKを活用ください!