🐥
SendGridにAPIでメール送信
概要
各クラウドサービスともにIPアドレスが変動する関係上、MTAを構築するのは非推奨になっている事が多く、その代替案としてSendGridというメール送信用のSaaSの利用を推奨している。
SMTPにも対応しているがPostfix等が無い環境でも使えるように、公式ライブラリも提供されているPythonで手軽にメール送信出来るスクリプトを作成する。
SendGridの登録やAPI_KEYは作成済みとする。
(送信用のスパム対策等の理由により、ドメイン所有確認など登録完了までに少々時間を要するので注意)
下準備
pip install sendgrid
API_KEYなどセキュアな情報も多いので環境変数としてデフォルト値を設定。
# 環境変数設定
export FROM_ADDRESS=hoge@example.com
export TO_ADDRESS=huga@example.com
export SUBJECT="this is test mail"
export API_KEY=SEND_GRID_API_KEY
設定ファイルを用意してsource
やdotenv
で読み込んでも良い。
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 "hoge@example.com" -t "huga@example.com" -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
Discussion