LoginSignup
1
1

More than 5 years have passed since last update.

[AWS][Python3]SESでIAM認証情報を変換してSMTP 認証情報を取得する

Posted at

SESをSMTPを利用して送信したい

SESを利用するならばboto3を利用するのが一番簡単かと思いますが,
ローカル開発環境ではMailHog等の開発用SMTPサーバを用いて動作確認を行なっている環境で
汎用的なsmtplibをテスト・本番で利用したいというのがそもそものはじまり

SMTPを利用するには

通常のsmtp同様以下のような形で行えます

email.py
def send_mail(self, host, user, password, msg):
  smtp_con = smtplib.SMTP_SSL(host=host)
  smtp_con.ehlo()
  smtp_con.login(user, password)
  result = smtp_con.send_message(msg=msg)
  smtp_con.close()

が、ここで渡すpasswordが曲者

以下のリンクを見るとわかりますが
通常boto3などのAPI経由であれば、パスワードにはIAMのAWS_SECRET_ACCESS_KEYを用いるが
SMTP認証情報にはAWS_SECRET_ACCESS_KEY を Amazon SES SMTPパスワードに変換したものを利用する必要があります
Amazon SES SMTP 認証情報の取得

新たにSMTP認証情報を持つIAMユーザを作る方法もありますが
今回はAWS_SECRET_ACCESS_KEY->SMTPCredentialsの変換を行います

Amazon SES SMTP Credentialsを python3 で生成する

実際に利用したコードがこちら
keyにAWS_SECRET_ACCESS_KEYを渡してあげればSMTP認証に利用できるパスワードが返却される

aws_ses_hash.py
def hash_smtp_pass_from_secret_key(self, key):
    message = "SendRawEmail"
    sig_bytes = bytearray(b'\x02')

    h = hmac.new(key.encode(), message.encode(), digestmod=hashlib.sha256)
    digest = h.hexdigest()

    sig_bytes.extend(bytearray.fromhex(digest))

    return base64.b64encode(sig_bytes).decode()

ちなみにpython2であれば以下が参考になります
■[tips][aws][python][ruby] Amazon SES SMTP Credentialsをpythonやrubyで作ってみる

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1