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の使い方でご不明な点があればお気軽にご相談ください。何ができあがるか、とても楽しみです!