SendGrid 新人成長記 第四回 Pythonを使ってWeb APIを呼び出す
- 2019年11月7日
- by 吉田 健人
- Category: 機能・使い方
こんにちは!今回は、よく知られているプログラミング言語を用いてSendGridのWeb APIを呼び出すコードを書き、メールを送信してみたいと思います。
前回までの記事では、APIリファレンスのTry it out機能を用いて簡易的にメールの送信を行ってきました。一方、実際の運用でユーザ登録やパスワードのリセットといった外部からのアクションをトリガーにメールを送ろうとする際には、アプリケーションとSendGridを連携させることが必要になってきます。それを実現させる手段の一つとして、SendGridではメール送信のための公式ライブラリを7つのプログラミング言語で用意しています。今回はその中からPythonを用いてメール送信をしてみました(Pythonを選んだのは私が以前触ったことのある言語だからというだけで、あまり深い理由はありません)。ライブラリの公式ページに基づいて、1. APIキーを環境変数に設定し、2. コードを書いて実行する、という2ステップで進めます。
1. 環境変数の設定
認証情報をコードにベタ書きするのはセキュリティ上望ましくないので、取得したAPIキーは環境変数として設定し、コードの中ではその環境変数を参照する形にしたいと思います。OSによって方法が異なりますが、macOS 10.14 Mojaveの場合、~/.bash_profileに
export SENDGRID_API_KEY=’SG.XXX’
という文字列を追加し(SG.XXXは取得したAPIキー)、sourceコマンドで設定を反映させます。
$ echo "export SENDGRID_API_KEY=’SG.XXX’" > ~/.bash_profile $ source ~/.bash_profile
2. 公式ライブラリを用いたコードの作成
まずはパッケージ管理ツールpipを使ってSendGridのライブラリをインストールしましょう。
$ pip3 install sendgrid
あとは下のようなコードを書いて実行すれば、メールが送信できます!
import os from sendgrid import SendGridAPIClient from sendgrid.helpers.mail import Mail message = Mail( from_email='from_address@example.com', to_emails='<<YOUR_ADDRESS>>', subject='Hello, World!', plain_text_content='Hello, World!') sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY')) response = sg.send(message) print(response.status_code)
os.environ.get(‘SENDGRID_API_KEY’)で環境変数からAPIキーを取得し、ライブラリで定義されたSendGridAPIClientというインスタンスに入れます。このインスタンスのメソッドであるsendに、メールを送信するための情報をjson形式で渡しています。<<YOUR_ADDRESS>>はご自身のメールアドレスにしてください。最後のprint文でステータスコードを表示させているので、コマンドラインに202と出たら送信処理は成功です。受信箱を確認してみましょう。
【補足】 公式ライブラリを使わない場合
補足として、以下に公式ライブラリを使わない方法も紹介します。実際、上のような単純なものであれば、プログラムの中で直接Web APIを呼び出すこともできます。先ほどと同様に環境変数を設定したら、HTTPリクエストを簡単に送れるライブラリであるrequestsをsendgridライブラリの代わりにインストールします。
$ pip3 install requests
コードは以下のようになります。
import os, requests url = 'https://api.sendgrid.com/v3/mail/send' headers = {'Authorization': f'Bearer {os.environ.get("SENDGRID_API_KEY")}'} message = {'personalizations': [{'to': [{'email': 'YOUR_ADDRESS'}], 'subject': 'Hello, World!'}], 'from': {'email': 'from_address@example.com'}, 'content': [{'type': 'text/plain', 'value': 'Hello, World!'}] } response = requests.post(url, headers=headers, json=message) print(response.status_code)
SendGrid公式ライブラリを使う場合と異なるのは、URLを指定していることと、Try it outの場合と同様にヘッダーにAPIキーを指定していることです。それでも、公式ライブラリを使う場合とさほど変わらないコード量でメールが送信できました。
Try it outを使うだけでは実際にメール配信サービスがどう運用されるかイメージが湧かなかったのですが、ソースコードからメール送信してみることで、外部のシステムやサービスと連携するための第一歩が踏み出せました。
※なお、公式ライブラリに関するサポートについては、こちらをご覧ください。