この記事はSoftLayer Advent Calendar 2014の4日の記事になります。
4日目の担当は雪本が担当します。
普段プログラムを書いてますので、プログラムに関する記事を書いてみました。
皆さん、ご存じですか?SoftLayerにはsendGridというメール送信用のサービスが用意されていることを。sendGridというのはメールの送信サービスです。簡単にいうとメールサーバを用意しなくてもメールが配信できるんです!!
もうこれでsendmailなどわざわざ設定をしなくてもいいわけです。
しかも、月に25,000通まで無料で送信!!
そんな便利なプランが用意されています。
わざわざSendGridにアカウントを登録しないでもSoftLayerを契約すると勝手についてきます。
私もこんな便利なサービスが利用できると知った時は驚きました!
これで、アプリケーションからメールを送るのに、わざわざ自前でMail Serverなど用意する必要はありません。
この機会に、ぜひ活用してください。
ということで今日はSendGridを使ってメールを送るプログラムをご紹介します。
SendGridはAPI経由でも送信できるみたいです。したがって、今回は普通にメールを送るパターンとAPIからメールを送るパターンを実装してみたいと思います。
sendGridを使う準備
登録の仕方については、日本情報通信株式会社の常田さんが記事にされていますので、そちらをご参考にしていただければ分かりやすいと思います。
pythonからsendGridを使いメールを送信
実際に簡単なプログラムでテストメールを配信してみたいと思います。
が、ここでトラブル発生!!
ポートを指定しないとメールが配信できないみたい。。
では25番で。。。
結局、587も送信できました。
いろいろ試した結果2525でも送信できました。
調べた結果、以下のポートを使うのがいいみたいです。
TLS connections では 25, 587, 2525
SSL encryption では 465.
# -*- coding: utf-8 -*-
import smtplib
from email.mime.text import MIMEText
from email.header import Header
con = smtplib.SMTP('smtp.sendgrid.net', 587)
con.esmtp_features['auth'] = 'LOGIN'
con.login('登録したアカウント', 'パスワード')
con.set_debuglevel(True)
cset = 'utf-8'
message = MIMEText(u'日本語のメール送ってみました', 'plain', cset)
message['Subject'] = Header(u'送信テスト', cset)
message['From'] = 'from@example.com'
message['To'] = 'to@example.com' #別になくてもいいかも。。
con.sendmail('from@example.com', ['yukimoto@usa-mimi.jp'], message.as_string())
con.close()
APIからメールを送信する
APIリファレンスは以下のサイトで参照できますので、詳しくはそちらをご確認ください
SendGridのAPIはリファレンスとして以下の8つに分かれています。
- SMTP API
- Web API
- Web API v3
- Webhooks
- Customer Subuser API
- Marketing Email API
- Reseller API
- Reseller Haiku API
ぜんぶ説明していると大変なのと、まだ、必要に迫られていないので、今回はメールを送信するということにフォーカスを当てて説明していきたいと思います。
Web APIからメールを送信する
APIでメールを送信する場合は特定のURLにPOSTすると送信できます。
今回はサンプルにあるように、curlを使ってメールを送信するプログラムで書いてみました。基本的にはサンプルをそのまま使っています。curlでメールが送信できるということはshellからも簡単にメールが送信できることになるので、便利に使えそうです。
$ curl -d 'to=destination@example.com&toname=Destination&subject=Example Subject&text=testingtextbody&from=info@domain.com&api_user=登録したアカウント&api_key=パスワード' https://api.sendgrid.com/api/mail.send.json
つぎに、APIで添付ファイルを送信してみます!
curl https://api.sendgrid.com/api/mail.send.json \
-F to=yukimoto@usa-mimi.jp -F toname=test -F subject="Example Subject" \
-F text="testing text body" --form-string html="<strong>testing html body</strong>" \
-F from=test@yourdomain.com -F api_user=登録したアカウント -F api_key=パスワード \
-F files[attachment.gz]=@f.php.gz https://api.sendgrid.com/api/mail.send.json
メールを送信して成功すると以下の様なメッセージが戻ってきます。
{"message":"success"}
successと出れば送信完了!エラー時はそのままerrorと戻ってきます。
まとめ
SendGridからメールを送るのは非常に簡単に送ることが出来ました。
通常のアプリで使うメールであれば25,000通に出すことはないので実質無料で使えると考えてもいいと思います。
AWSでも使えるサービスですが、SoftLayerでも使えるのは非常に嬉しいサービスです。
皆さんこの機会にぜひ使ってみてください!