Не удается отправить электронное письмо, связанное с кириллицей - PullRequest
0 голосов
/ 01 марта 2019

результаты поиска не помогли. Я новичок в кодировании, и в качестве проблемы я попытался очистить веб-сайт от погодных данных и затем отправить эти данные на мою электронную почту.Я подозреваю, что кириллица - причина, по которой электронное письмо не будет отправлено.Я запустил несколько тестов, и если я передам нормальный латинский язык для моих параметров 'subject' & 'msg', почта сработает, но если у одного из них будет какой-нибудь нелатинский, почта не пройдет.Мои знания Unicode очень ограничены, и почему это даже может привести к ошибке, мне неизвестно

import smtplib
import config
import requests
from bs4 import BeautifulSoup


def weather():
    src = requests.get('https://www.sinoptik.bg/asenovgrad-bulgaria-100733618').text
    soup = BeautifulSoup(src, 'lxml')

    city_name = soup.find('h1').text
    current_temp = soup.find('span', class_='wfCurrentTemp').text
    feels_temp = soup.find('span', class_='wfCurrentFeelTemp').text
    weather_type = soup.find('strong').text
    a = f'{city_name}\nТемпературата вмомента е {current_temp}\n{feels_temp}C\nОчаква се предимно {weather_type} време.'
    return a


def send_email(subject, msg):
    try:
        server = smtplib.SMTP('smtp.gmail.com:587')
        server.ehlo()
        server.starttls()
        server.login(config.EMAIL_ADRESS, config.PASSWORD)
        message = 'Subject: {}\n\n{}'.format(subject, msg)
        server.sendmail(config.EMAIL_ADRESS, config.SEND_TO, message)
        server.quit()
        print('Success: Email sent!')
    except:
        print('Email failed to send.')


subject = 'Дневна прогноза за времето'
msg = weather()

send_email(subject, msg)

, когда я удаляю try /, за исключением того, что я получаю следующую ошибку:

UnicodeEncodeError: 'ascii' codec can't encode characters in position 9-14: ordinal not in range(128)

, используя.encode ('utf-8) мне удалось получить электронное письмо для отправки, но я получил символы ascii.

b'\xd0\x90\xd1\x81\xd0\xb5\xd0\xbd\xd0\xbe\xd0\xb2\xd0\xb3\xd1\x80\xd0\xb0\xd0\xb4\n\xd0\xa2\xd0\xb5\xd0\xbc\xd0\xbf\xd0\xb5\xd1\x80\xd0\xb0\xd1\x82\xd1\x83\xd1\x80\xd0\xb0\xd1\x82\xd0\xb0 \xd0\xb2\xd0\xbc\xd0\xbe\xd0\xbc\xd0\xb5\xd0\xbd\xd1\x82\xd0\xb0 \xd0\xb5 18\xc2\xb0C\n\xd0\xa3\xd1\x81\xd0\xb5\xd1\x89\xd0\xb0 \xd1\x81\xd0\xb5: 18\xc2\xb0C\n\xd0\x9e\xd1\x87\xd0\xb0\xd0\xba\xd0\xb2\xd0\xb0 \xd1\x81\xd0\xb5 \xd0\xbf\xd1\x80\xd0\xb5\xd0\xb4\xd0\xb8\xd0\xbc\xd0\xbd\xd0\xbe \xd0\xa1\xd0\xbb\xd1\x8a\xd0\xbd\xd1\x87\xd0\xb5\xd0\xb2\xd0\xbe \xd0\xb2\xd1\x80\xd0\xb5\xd0\xbc\xd0\xb5.'

, затем я попытался расшифровать его обратно с помощью .decode (), но электронная почта не работаетснова?

1 Ответ

0 голосов
/ 01 марта 2019

импорт другого модуля, кажется, частично решает проблему

from email.mime.text import MIMEText

, затем измените следующее:

message = 'Subject: {}\n\n{}'.format(subject, msg)
        server.sendmail(config.EMAIL_ADRESS, config.SEND_TO, message)

на

message = MIMEText('Subject: {}\n\n{}'.format(subject, msg))
server.sendmail(config.EMAIL_ADRESS, config.SEND_TO, message.as_string())

к сожалению, это изменение влияет наТело письма и «Тема» больше не действуют как единое целое, а находятся внутри тела письма, оставляя мой «Тема» пустым.

...