BREVO (旧 SendinBlue )で Pythonからメール
メール配信サービスのBREVO(旧SendinBlue)でPythonからメール送信を試したら、(ベトナムならでは?)の問題も起きつつ成功したのでご紹介します。
SendGridが値上げ!
日本でのSendGridの契約が4月1日から、無料枠が激減するのでメール配信サービスどうしよう、と言うケースも増えているのではないかと思います。
1日100メールとなるそうで、月間上限が12,000 ≒ 3000 という変化です。 開発中はできれば無料の範囲で使いたい、バグとかテストで消費する無駄送りも稟議書とか書かずに気にせず作業をしたい、という気持ちもありますし、ベトナムとか「ワカランけどコスト優先!」というお客さんの濃度が高すぎ、時に圧をかけて負担を強いるようなケースも珍しく無いためこのあたり神経質になってしまいます。
※利用には対価があるのは当然なので、無料にしてくれ!みたいなことではないです。念の為。。。🙇🏻
https://support.sendgrid.kke.co.jp/hc/ja/articles/29245963487641
調べたらBREVOというサービスが良さげ
最近名前が変わったそうですが、BREVOというサービスではサーバー連携で送信が可能で無料プランが有り、上限は1日300メールと4月以降のSendGridの3倍です。
実際使うとどうなのかも、ちょっと調べた感じでは高評価。
また、マーケティングツールではありますがサイトは技術者志向で、スッキリまとまっていて頭の悪さみたいなものを微塵も感じません。すべてのサイトデザインで見習ってほしいレベルです。
BREVOでいこう!
単純な価格の比較だと2万通を超えて沢山送信する場合はSendGridの方が割安になるようです。今回はマーケティングで大量に送る用途ではなく、アカウント管理での利用がメインになるので無料範囲が広いBREVOを採用することにしました。 以下は実際に行った手順です。
1.アカウント作成
まずはアカウントを作成。
無料アカウントで300メール/日が送信できるとあります。
**困りごと**
SMSによるアカウント認証が出てきますが、なぜか受診できずいったん無視して先に進みました。
2. メールサーバのDNS設定
自分が利用しているドメインのDNS設定が必要とあったのでやってみます。
後で考えると、これは必要ないんじゃないのかな?という気がしてきました。
ドメインの設定
右上のメニュー⇒Senders, Domains & Dedicated IPs を選択
Domainsを選択
Add Domainボタンを押す
メールのドメイン名を入力
メールサーバーのDNSを設定に追加すべき項目(TXT)が表示されます。
↑をドメインを管理しているサイト(お名前.com とかRoute53とか)に設定して
しばらく待ってから、Verify&Authenticate ボタンを押すと
通信して確認の後OKが表示されます。
3. 新しいSMTPキーを作成する
Brevo アカウントに新しい SMTP キーを作成するには:
[アカウント] ドロップダウン > [SMTP と API]をクリックします。
[SMTP]タブで、[新しい SMTP キーの生成]をクリックします。
SMTP キーに名前を付けます。
「生成」をクリックします。
完全なキーをコピーし、安全な環境に保存します。
4. Pythonから送信してみる
このキーを使って、プログラムからメールの送信をすることが出来ます。
本家のサイトに各プログラム言語のサンプルコードがあるので、いったんこれを使ってテストをすることにします。
https://developers.brevo.com/reference/sendtransacemail
from __future__ import print_function
import time
import sib_api_v3_sdk
from sib_api_v3_sdk.rest import ApiException
from pprint import pprint
configuration = sib_api_v3_sdk.Configuration()
configuration.api_key['api-key'] = 'YOUR API KEY'
api_instance = sib_api_v3_sdk.TransactionalEmailsApi(sib_api_v3_sdk.ApiClient(configuration))
subject = "My Subject"
html_content = "<html><body><h1>This is my first transactional email </h1></body></html>"
sender = {"name":"John Doe","email":"example@example.com"}
to = [{"email":"example@example.com","name":"Jane Doe"}]
cc = [{"email":"example2@example2.com","name":"Janice Doe"}]
bcc = [{"name":"John Doe","email":"example@example.com"}]
reply_to = {"email":"replyto@domain.com","name":"John Doe"}
headers = {"Some-Custom-Name":"unique-id-1234"}
params = {"parameter":"My param value","subject":"New Subject"}
send_smtp_email = sib_api_v3_sdk.SendSmtpEmail(to=to, bcc=bcc, cc=cc, reply_to=reply_to, headers=headers, html_content=html_content, sender=sender, subject=subject)
try:
api_response = api_instance.send_transac_email(send_smtp_email)
pprint(api_response)
except ApiException as e:
print("Exception when calling SMTPApi->send_transac_email: %s\n" % e)
ようっし〜、python sendmail.py して実行じゃ!
しかし、エラーが
実行してみるとエラーが。。。君のアカウントはアクティベートされてないから無理、ということです。ログインしてAPIキー取得とか普通にできているんですけどね(汗
[permission_denied]: Unable to send email. Your SMTP account is not yet activated.
色々と調べると、どこの記事を見ても
と書かれています。そういえば、SMSが来なくて認証出来てないもんね。(汗
サイトのサポートのところから、今の状況説明をして助けを求めます。
5分で返事が!!
すぐに返答が来て、アカウント認証をしてくれたとのこと。お問い合わせから10分で解決…。BREVOさんのサポートは世界一かもしれん。。。
早速プログラムを実行してみると。。。
{'message': 'Email sent successfully!'}
おおお、エラーでずに無事実行できました。
メールを確認すると、たしかに届いていました!
これで作業が捗りそうです!:)))
資料:
アカウントのアクティベートなどで参考にした記事、動画は以下。
SendinBlueの頃から評判が良いんですね