SendGridにAPIでメール送信

概要

各クラウドサービスではIPアドレスが変動するため、MTAの構築は非推奨とされている 代替としてSendGridというメール送信用SaaSの利用が推奨されている

SMTPにも対応しているが、今回はPostfix等が無い環境でも使えるようにPythonでスクリプトを作成する 公式ライブラリが提供されているので手軽に実装できる

SendGridの登録やAPI_KEYは作成済みとする。
(送信用のスパム対策等の理由により、ドメイン所有確認など登録完了までに少々時間を要するので注意)

下準備

pip install sendgrid

API_KEYなどセキュアな情報も多いので環境変数としてデフォルト値を設定

# 環境変数設定
export FROM_ADDRESS=[email protected]
export TO_ADDRESS=[email protected]
export SUBJECT="this is test mail"
export API_KEY=SEND_GRID_API_KEY

設定ファイルを用意してsourcedotenvで読み込んでも良い

source ./sendgrid.env

コード

以下、雑にコード。

#!/usr/bin/env python3
import os
import sys
import argparse
from sendgrid import SendGridAPIClient
from sendgrid.helpers.mail import Mail

def get_args():
# 引数取得
    parser = argparse.ArgumentParser()

    # 通常の引数指定
    if sys.stdin.isatty():
        parser.add_argument("message", help = "Mail Message", type = str)
    # パイプライン経由
    else:
        parser.add_argument("message", help = "Mail Message", nargs = "?", type = str, default = sys.stdin.read())

    parser.add_argument("-f", help = "Send from Address", default = os.environ.get('FROM_ADDRESS'))
    parser.add_argument("-t", "--to", help = "Send to Address", default = os.environ.get('TO_ADDRESS'))
    parser.add_argument("-s", "--subject", help = "Message Subject", default = os.environ.get('SUBJECT'))
    parser.add_argument("-k", "--key", help = "SendGrid API-KEY", default = os.environ.get('API_KEY'))

    args = parser.parse_args()

    return(args)

def to_sendgrid(args):
# SendGridへAPIにて送信
    message = Mail(
        from_email = args.f,
        to_emails = args.to,
        subject = args.subject,
        plain_text_content = args.message)

    sg = SendGridAPIClient(args.key)
    response = sg.send(message)
    # debug
    #print(response.status_code)
    #print(response.body)
    #print(response.headers)

def main():

    args = get_args()
    to_sendgrid(args)

if __name__ == "__main__":
    main()

使い方

コマンドライン引数で必要パラメータを渡す場合

./HTTPMail2SendGrid.py -f "[email protected]" -t "[email protected]" -s "TEST MAIL" -k "API_KEY" "This is message."

-hでヘルプ表示

./HTTPMail2SendGrid.py -h
usage: HTTPMail2SendGrid.py [-h] [-f F] [-t TO] [-s SUBJECT] [-k KEY] message

positional arguments:
  message               Mail Message

optional arguments:
  -h, --help            show this help message and exit
  -f F                  Send from Address
  -t TO, --to TO        Send to Address
  -s SUBJECT, --subject SUBJECT
                        Message Subject
  -k KEY, --key KEY     SendGrid API-KEY

パイプ経由でテキストデータを渡す形でも可。
(オプション指定しない場合は環境変数で指定したデフォルト値を使う)

echo hogehoge | ./HTTPMail2SendGrid.py

成果物

HTTPMail2SendGrid

参考

Built with Hugo
Theme Stack designed by Jimmy