cotta-dev
@cotta-dev (Cotta)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

AWS LambdaからAWS SESで、本文に日本語があるメールを送信できない

解決したいこと

AWS LambdaからAWS SES(simple email service)を使用して、メール送信を行いたいです。
メールの本文に日本語を使用すると、メールが送信されません。
解決方法を教えて下さい。

該当するソースコード

import json
import os
import boto3

SRC_MAIL = os.environ['SRC_MAIL'] # Formメールアドレス
DST_MAIL = os.environ['DST_MAIL'] # Toメールアドレス
REGION = "ap-northeast-1"
CHARSET = 'UTF-8'

def send_email(source, to, subject, body):
    client = boto3.client('ses', region_name=REGION)

    response = client.send_email(
        Source=source,
        Destination={
            'ToAddresses': [
                to,
            ]
        },
        Message={
            'Subject': {
                'Data': subject,
                'Charset': CHARSET,
            },
            'Body': {
                'Text': {
                    'Data': body,
                    'Charset': CHARSET,
                },
            }
        }
    )
    
    return response

def lambda_handler(event, context):
    email_subject = "件名"
    email_message = "こんにちは"
    r = send_email(SRC_MAIL, DST_MAIL, email_subject, email_message)
    return r

自分で試したこと

  • 件名は日本語でも問題なく送信できます

  • メールの本文を英文字にすると問題なく送付することができます
    email_message = "hello"

  • 文字コードを指定しても送信できませんでした
    'Charset': 'UTF-8',

0

1Answer

状況を正確に理解するため、いくつか質問させてください

  1. 「送信できなかった」とは、具体的にどのように確認されましたか? (例「スクリプトを実行後、宛先アドレスの受信ボックスを確認したが、5分たってもメールが届かなかった」など
  2. 迷惑メールボックスに入っていませんか?
  3. Pythonスクリプトは正常終了していますか? それとも、例外を発生させていますか?
  4. スクリプトを実行後、AWSマネジメントコンソールではSESのメール送信数は増えていますか?
  5. AWSマネジメントコンソールから、SESのテストメール送信で同じ日本語の Subject / Body を送信してみるとどうなりますか?
0Like

Comments

  1. @cotta-dev

    Questioner

    @bigen1925さん
    ご質問ありがとうございます。

    1. スクリプト実行後、5分以上たっても送信元アドレスで送信済みメールを確認できていません。
    また、宛先アドレスの受信ボックスでも確認できておりません。
    2. 宛先アドレスの迷惑メールボックスを確認しましたが、入っておりません。
    3. Pythonスクリプトは正常終了しています。
    4. SES>Account dashboard>Sendsを確認すると、Countは増えております。
    5. テストメールでは日本語でも問題なく送信できております。

    追記:宛先アドレスは送信元アドレスと同じものを現段階では使用しております。
  2. ありがとうございます。

    - スクリプトが正常終了している → SES API の呼び出しには成功しており、パラメータ不備などはなさそう
    - Countが増えている → SES内部的には「送信済み」扱いとなっている

    ことから、恐らく「送信できていない」ではなく「受信できていない」という問題のように見えます

    「受信できない」問題の場合は、SESではなくメール受信サーバー側(例えばGmailなど)の問題ということになります

    受信の問題としては、

    - メールフィルターによって削除されている
    - 迷惑メールに振り分けられている
    - ネットワークの問題で到着に時間がかかっている

    などがよくある原因ですが、迷惑メールは確認していただいていますし、全く同じ文面をコンソールから送信した場合は受信できているということなのでメールフィルターやネットワークの可能性も低そうですね・・・


    受信側の問題はメールサーバーによって原因も変わってはくるのですが、私ではサーバーを具体的に聞いてもこれ以上明確な心当たりは出せませんので、お力になれなさそうです・・・
    申し訳ありません


    なお、

    > 送信元アドレスで送信済みメールを確認できていません

    こちらに関しては、@Tetsu_K さんが使われているメールサーバーからではなく、SESから送信しているため送信履歴が残っていないものかと思われますので、正常となります



  3. @cotta-dev

    Questioner

    @bigen1925さん
    ご回答ありがとうございます。

    もしかしたら、サンドボックスを開放していないのが原因かもしれません。
    サンドボックスを開放する手順で、優先言語を英語か日本語を選ぶ欄があるので、ここを日本語にしたら直る可能性もあるのかなと思いました。
    しかし、個人利用であるため、サンドボックスを開放までする予定がございませんので、確認ができなさそうです、、、

    Gmailなので、諦めてGCPのAPIを使用しようと思います。

Your answer might help someone💌