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

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キーは後で使うので、忘れないように保管してください。

Create API Key

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

API Key Created

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

受信ボックスに届いたメールを確認しましょう!以下のようなメールが届いているはずです。

testメール

まとめ

これであなたも、ファイルを添付したメールを送れるようになりました。でも、Twilio SendGridの機能はこれだけではありません。他にもたくさんの便利な機能があるので、ドキュメントをチェックしてください。

Twilio SendGridの使い方でご不明な点があればお気軽にご相談ください。何ができあがるか、とても楽しみです!

メールを成功の原動力に

開発者にもマーケターにも信頼されているメールサービスを利用して、
時間の節約、スケーラビリティ、メール配信に関する専門知識を手に入れましょう。