はじめに
‐ 達成したいこと
VPC内のサーバーからメールを送信することです。短期間の利用を想定しているため、手軽に利用できるサービスが理想です。
‐ SendGridを使用してメール送信を実現
IBM Cloudのメニューには「Email Delivery」というサービスがあります。これは、サードパーティ製品のSendGridに基づいています。IBM Cloudのカタログページには、5分で使い始められるといった手軽さについての説明もあります。
環境はこのように構成します。料金を節約するため、VPCサーバーはローカルPCでシミュレーションして、Pythonコードを実行します。
実現方法 _ SendGridサービスの設定
設定の流れ
- IBM Cloud Portal: SendGrid Accountの作成
- SendGrid Portal: Sender Identityの作成
- SendGrid Portal: Setup Guideより設定
1. IBM Cloud Portal: SendGrid Accountの作成について
IBM Cloud Portalでは、Classic Infrastructure ➝ Services ➝ Email Deliveryにアクセスし、Order Email Delivery Serviceボタンをクリックします。
新規作成の画面で、
‐ Email Address:こちらのEmail AddressはSendGrid Accountに関連付けられ、有効なアドレスであるかどうかの確認は行われません。実際にメールを送信する際に使用される『送信元』のメールアドレスではありません。
‐ Plan:月に3000通のメールを無料で送信できるFree Packageプランを利用します。
Createボタンをクリックして、すぐにAccountの作成が完了です。
IBM Cloud Portalでは、Planの変更とサービスのキャンセルのみ操作でき、その他の設定はSendGridの画面で行う必要があります。Vendor Portalをクリックすると、SendGrid PortalにSSO(Single Sign-On)でアクセスできます。つまり、現在は、SendGridのユーザー名やパスワードを入力する必要はありません。
2. SendGrid Portal: Sender Identityの作成について
最初にSendGridのPortalをアクセスする際に、自動的にSetup Guideが表示されます。(ダッシュボード画面からいつでもSetup Guideを開くことができます。)
SendGrid 経由でメールを送信するには、送信元のメールアドレスが有効であることを確認する必要があります。そのため、送信元メールアドレスごとにSender Identityを作成する必要があります。
Setup Guide画面のCreate sender identityをクリックします。
詳細画面で送信元のメールアドレス情報を入力し、Createをクリックします。
このメールアドレスに確認メールが送信されます。確認すると、Sender Identity が「VERIFIED」の状態になります。
3. SendGrid Portal: Setup Guideより送信方法の設定について
次に、Setup Guideに従って、送信環境に応じてメールを送信する方法を確認・設定します。
Setup Guideの画面に戻り、Use Web API or SMTP をクリックします。
送信側の開発言語を選択します。こちらはPythonになります。
SendGridのWeb APIをアクセスするためのAPI Keyを作ります。
API Keyが作成したら、次の環境変数の設定CLIも自動的に更新されます。
これでSendGrid Portalでの設定が完了です。
実現方法 _ ローカルPCでのPythonコードの説明
Sendguide PortalでのSetup Guideには、ローカルPCでPython環境をセットアップする方法に関する情報が記載されています。
簡単に言いますと、次のことが必要です:
- API KeyをローカルPCのenvとして設定します。
- pipコマンドでsendgrid パッケージをインストールします。
- メールを送信するためのPythonコードを準備します。
Setup Guideには、Sampleコマンドが記載されており、参考すれば問題ないと思いますが、ここで特に送信するためのPython コードについて、少し説明します。
import os
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail
message = Mail(
from_email='from_email@example.com', #送信元のメールアドレス。Sender Identityに登録することが必要
to_emails='to@example.com', #送信先のメールアドレス
subject='Sending with Twilio SendGrid is Fun',
html_content='<strong>and easy to do anywhere, even with Python</strong>')
try:
sg = SendGridAPIClient(os.environ.get('SENDGRID_API_KEY'))
response = sg.send(message)
print(response.status_code)
print(response.body)
print(response.headers)
except Exception as e:
print(e.message)
効果を確認
Pythonコードを実施し、宛先のメールボックスで受信状況を確認します。via sendgrid.netという情報が表示されています。
もし受信されていない場合:
- ジャンクフォルダを確認してみましょう。
- SendGrid Portalで送信Activityを確認しましょう。Complianceの原因でBlockされた可能性があります。例えば、私の会社のメールアドレスがこのような外部サービスより送信することが許可されていません。
他には
参考資料:
- FAQ in IBM Cloud Doc:https://cloud.ibm.com/docs/email-delivery?topic=email-delivery-email-delivery-faq
- 外部公開のSendGrid Github Repository: https://github.com/sendgrid/sendgrid-python
Supportについて:
SendGridは、実はTwilio会社が提供しているサービスです。問い合わせの際には、IBM Cloudのサポートケースではなく、SendGridへサポートケースを起票することになります。
起票するURL:https://support.sendgrid.com/hc/en-us
(英語のみのようです。)