boto3 ses InvalidParameterValue ошибка из-за символов Юникода

Я пытаюсь отправить электронную почту через SES, используя boto3. Ниже мой код.

from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

import boto3

message = MIMEMultipart()
message['Subject'] = 'i am subject äöü'
message['From'] = 'sender äöü <from@email.com>'
message['To'] = 'receipient äöü <to@email.com>'
html = MIMEText('<strong>Welcome to AWS SES äöü</strong>', 'html')
message.attach(html)

ses.send_raw_email(
    RawMessage={
        'Data': message.as_string()
    }
)

Но я получаю исключение ниже. Эта ошибка связана с символами Юникода (äöü) в From а также To адреса. Если я удаляю символы Юникода, то электронная почта отправляется успешно.

Произошла ошибка (InvalidParameterValue) при вызове операции SendRawEmail: отсутствует окончательный '@domain'

Пожалуйста, помогите решить проблему.

1 ответ

Закодируйте части электронной почты, как указано в https://mg.pov.lt/blog/unicode-emails-in-python.html. Это решило проблему, и теперь я могу отправлять электронные письма.

Согласно документации SES:

Если вы хотите использовать символы Юникода в имени "friendly from", вы должны закодировать имя "friendly from" с использованием синтаксиса MIME-кодированных слов, как описано в разделе "Отправка необработанной электронной почты с помощью Amazon SES API".

Один из способов сделать это:

from email.header import Header

msg['Subject'] = Header('helloé éé', 'utf-8').encode()
# '=?utf-8?b?aGVsbG/DqSDDqcOp?='
Другие вопросы по тегам