Twilio SendGridとPythonで添付ファイルを送信する方法

この記事は Sending Email Attachments with Twilio SendGrid and Python の抄訳です。
PythonとTwilio SendGrid APIを使うと、添付ファイルを含むメールを簡単に送信することができます。この記事では、SendGrid経由で送信するメールにPDFファイルを添付する方法を紹介します。もし一度もメール送信を試したことがなければ、こちらの記事を先にチェックしてください。
必要なツール
始める前に、以下の3つがセットアップされているかを確認しましょう。
|
・Python 3(Python 2系はEOLを迎えました) ・SendGrid無料アカウント ・プロジェクトへのTwilio SendGrid Python Libraryのインストール |
セットアップ
もしまだアカウントを持っていなければ、こちらから申し込んでください。このチュートリアルの内容は無料プランで試すことが可能です。アカウントを取得したらAPIキーを作成しましょう。作成したAPIキーは後で使うので、忘れないように保管してください。

APIキーを作成すると以下のように表示されます。

APIキーはソースコードに直接書くのではなく、Pythonから読み込む環境変数として登録しておくのがお勧めです。ここではSENDGRID_API_KEYという環境変数にAPIキーを登録します(詳しい方法はこちら)。この環境変数は後で使います。
仮想環境
本記事のコードを独立した環境で実行したい場合は仮想環境を使います。仮想環境についてはこちらの記事を参照してください。セットアップの手順は以下のとおりです。
まず、virtualenvパッケージをインストールし、以下のコマンドを実行します。
virtualenv emails
次に、仮想環境をアクティベートします。
source ./emails/bin/activate
SendGrid Python helperライブラリをインストールします。
pip install sendgrid
メール送信
send_email.pyに以下のソースコードを書きます。
import os
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
message = Mail(
from_email='from_email@example.com',
to_emails='to@example.com',
subject='Sending with Twilio SendGrid is Fun',
html_content='<strong>and easy to do anywhere, even with Python</strong>')
sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
response = sg.send(message)
print(response.status_code, response.body, response.headers)
Python base64 moduleはPDFファイルを読み込んでbase64エンコードするために使います。また、今回はテスト用にattachment.pdfというファイルを準備しました。send_email.pyと同じフォルダにPDFファイルを置き、同名にリネームしてください。
Twilio SendGrid helperライブラリを使って添付ファイルを設定します。先ほど準備したattachment.pdfを実際に送ってみましょう。
import os
import base64
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import (Mail, Attachment, FileContent, FileName, FileType, Disposition)
message = Mail(
from_email='from_email@example.com',
to_emails='to@example.com',
subject='Sending with Twilio SendGrid is Fun',
html_content='<strong>and easy to do anywhere, even with Python</strong>'
)
with open('attachment.pdf', 'rb') as f:
data = f.read()
f.close()
encoded_file = base64.b64encode(data).decode()
attachedFile = Attachment(
FileContent(encoded_file),
FileName('attachment.pdf'),
FileType('application/pdf'),
Disposition('attachment')
)
message.attachment = attachedFile
sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
response = sg.send(message)
print(response.status_code, response.body, response.headers)
実行する前に、環境変数SENDGRID_API_KEYが登録されていることを確認しましょう。to_emailsにあなたのメールアドレスを設定しておくと、実際に届いたメールからソースコードが正しく動いているかを確かめることができます。
ソースコードを保存したら、以下のコマンドを実行してメールを送ります。
python send_email.py
受信ボックスに届いたメールを確認しましょう!以下のようなメールが届いているはずです。

まとめ
これであなたも、ファイルを添付したメールを送れるようになりました。でも、Twilio SendGridの機能はこれだけではありません。他にもたくさんの便利な機能があるので、ドキュメントをチェックしてください。
Twilio SendGridの使い方でご不明な点があればお気軽にご相談ください。何ができあがるか、とても楽しみです!


