Help us understand the problem. What is going on with this article?

SoftLayerで提供されているメール配信サービス、SendGridを使ってみる

More than 5 years have passed since last update.

この記事はSoftLayer Advent Calendar 2014の4日の記事になります。
4日目の担当は雪本が担当します。
普段プログラムを書いてますので、プログラムに関する記事を書いてみました。

皆さん、ご存じですか?SoftLayerにはsendGridというメール送信用のサービスが用意されていることを。sendGridというのはメールの送信サービスです。簡単にいうとメールサーバを用意しなくてもメールが配信できるんです!!
もうこれでsendmailなどわざわざ設定をしなくてもいいわけです。
しかも、月に25,000通まで無料で送信!!
そんな便利なプランが用意されています。
わざわざSendGridにアカウントを登録しないでもSoftLayerを契約すると勝手についてきます。
私もこんな便利なサービスが利用できると知った時は驚きました!

これで、アプリケーションからメールを送るのに、わざわざ自前でMail Serverなど用意する必要はありません。
この機会に、ぜひ活用してください。

ということで今日はSendGridを使ってメールを送るプログラムをご紹介します。
SendGridはAPI経由でも送信できるみたいです。したがって、今回は普通にメールを送るパターンとAPIからメールを送るパターンを実装してみたいと思います。

sendGridを使う準備

登録の仕方については、日本情報通信株式会社の常田さんが記事にされていますので、そちらをご参考にしていただければ分かりやすいと思います。

http://niccloud.niandc.ne.jp/?p=845

pythonからsendGridを使いメールを送信

実際に簡単なプログラムでテストメールを配信してみたいと思います。

が、ここでトラブル発生!!
ポートを指定しないとメールが配信できないみたい。。
では25番で。。。

結局、587も送信できました。
いろいろ試した結果2525でも送信できました。

調べた結果、以下のポートを使うのがいいみたいです。

TLS connections では 25, 587, 2525
SSL encryption では 465.

python
# -*- 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リファレンスは以下のサイトで参照できますので、詳しくはそちらをご確認ください

https://sendgrid.com/docs/index.html

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からも簡単にメールが送信できることになるので、便利に使えそうです。

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で添付ファイルを送信してみます!

shell
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

メールを送信して成功すると以下の様なメッセージが戻ってきます。

shell
{"message":"success"}

successと出れば送信完了!エラー時はそのままerrorと戻ってきます。

まとめ

SendGridからメールを送るのは非常に簡単に送ることが出来ました。
通常のアプリで使うメールであれば25,000通に出すことはないので実質無料で使えると考えてもいいと思います。
AWSでも使えるサービスですが、SoftLayerでも使えるのは非常に嬉しいサービスです。
皆さんこの機会にぜひ使ってみてください!

nsas454
株式会社MNU
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした