Ошибка кодирования Unicode при попытке отправить числовой код по электронной почте с использованием Python - PullRequest
0 голосов
/ 01 августа 2020

Я новичок, пытаюсь отправить персонализированное письмо с помощью Python. Мне нужно отправить числовой код вместе с сообщением, и я использую этот код.

import smtplib
import ssl

def send_email(receive, pCode):
    port = 465

    sender = "mail@gmail.com"
    password = "passw"
    receive = sender  # For test purposes
    recipients = [{"receive": receive, "pCode": pCode}] # Also for test purposes

    message = """
    Subject: SUBJ
    
    CODE:
    {pCode}
    """

    context = ssl.create_default_context()

    print("Starting to send")
    with smtplib.SMTP_SSL("smtp.gmail.com", port, context=context) as server:
        server.login(sender, password)
        for recipient in recipients:
            server.sendmail(sender, recipient["receive"], message.format(pCode=pCode))

    print("email sent")



send_email("receive@gmail.com", '123456')

Но когда я запускаю его, я получаю эту ошибку.

Traceback (most recent call last):
  File "C:/MyPythonScripts/Iubi/PythonApps/emailSender.py", line 54, in <module>
    send_email("receive@gmail.com", '123456')
  File "C:/MyPythonScripts/Iubi/PythonApps/emailSender.py", line 48, in send_email
    server.sendmail(sender, recipient["receive"], message.format(pCode=pCode))
  File "C:\Users\Francesco Cambria\AppData\Local\Programs\Python\Python38-32\lib\smtplib.py", line 859, in sendmail
    msg = _fix_eols(msg).encode('ascii')
UnicodeEncodeError: 'ascii' codec can't encode character '\xe8' in position 95: ordinal not in range(128)

I действительно пробовал все, я добавил # encoding=utf8 поверх своего файла, я пробовал с pCode = pCode.encode('utf8') и некоторыми другими решениями, которые я нашел при переполнении стека, но ни одно, похоже, не работает, я всегда получаю одну и ту же ошибку .

1 Ответ

0 голосов
/ 01 августа 2020

вы можете сами закодировать сообщение, например:

server.sendmail(sender, recipient["receive"], message.format(pCode=pCode).encode('utf-8'))
...