Отправка электронной почты с помощью библиотеки smtplib с Python

#python #python-3.x

Вопрос:

Отправляя электронное письмо с библиотекой smtplib с помощью приведенной ниже программы Python, однако, я получаю сообщение об ошибке SMTPServerDisconnected: Соединение неожиданно закрыто.

 import smtplib

subject = 'This is a test subject'
body = 'This is a test body'
message = ("From: XXXX@gmail.comrnTo: YYYY@gmail.comrnrn{subject}nn{body}")

server = smtplib.SMTP(host='smtp.gmail.com', port=465)

try:
    server.ehlo()
    server.starttls()
    server.login('XXXX@gmail.com', 'XXXX')
    server.sendmail('XXXX@gmail.com', 'YYYY.smithson@gmail.com', message)

except Exception as e:
    print(e)

finally:
    server.quit()
 

Полный код ошибки ниже:

 Traceback (most recent call last):
  File "C:/Users/XXXX/PycharmProjects/New/Project/test.py", line 9, in <module>
    server = smtplib.SMTP(host='smtp.gmail.com', port=465)
  File "C:UsersXXXXAppDataLocalProgramsPythonPython38libsmtplib.py", line 253, in __init__
    (code, msg) = self.connect(host, port)
  File "C:UsersXXXXAppDataLocalProgramsPythonPython38libsmtplib.py", line 341, in connect
    (code, msg) = self.getreply()
  File "C:UsersXXXXAppDataLocalProgramsPythonPython38libsmtplib.py", line 398, in getreply
    raise SMTPServerDisconnected("Connection unexpectedly closed")
smtplib.SMTPServerDisconnected: Connection unexpectedly closed
 

При проверке порта 587 для SMTP-серверов Google я получаю ошибку аутентификации, поэтому я полагаю, что 465-правильный порт TLS. Я также видел еще одно сообщение о добавлении заголовков » От » и » До » и, следовательно, добавил в свою собственную адаптацию. Я также включил POP3 и IMAP в обеих учетных записях Gmail.

Заранее благодарен вам за помощь, недавно запустил Python!

Ответ №1:

Это другой способ отправки электронных писем с помощью Python в SMTPLIB.

 import smtplib
content = "-" # Enter your content here
mail = smtplib.SMTP('smtp.gmail.com', 587)
mail.ehlo()
mail.starttls()
main.login('EMAIL@something.com', 'PASSWORD TO YOUR ACCOUNT')
header = 'To:'   'TO EMAIL'   'n'   'From:' 
           'FROM EMAIL'   'n'   'Subject: Sent email from python n'
content = header   content
mail.sendmail('FROM EMAIL', 'TO EMAIL', content) # (1) = Sender, (2) = Receiver
mail.close
 

Будьте осторожны, чтобы не подделать отправленное вами электронное письмо с учетной записи, которой вы не владеете, если вы это сделаете, это может вызвать некоторые нежелательные эффекты. Убедитесь, что электронные письма, которые вы вводите, являются действительными и вашими собственными. Кроме того, вы можете создать учетную запись Google для отправки электронной почты, чтобы отправлять свою почту другим людям, потому что вам нужно будет ослабить защиту этого нового электронного письма. Сначала создайте учетную запись gmail и перейдите к своему аватару круга. Перейдите в раздел управление учетной записью > безопасность >> и включите менее безопасные приложения. Не используйте эту электронную почту для всего, используйте ее только для отправки электронных писем через python, потому что это безопаснее.

Комментарии:

1. Привет, я попробовал выше, но, к сожалению, все равно получаю ту же ошибку, заменяя соответствующую информацию там, где это необходимо. Это в тестовой учетной записи gmail, для которой я включил POP3 / IMAP, отключил опцию «менее безопасные приложения», попробовал оба порта 587 и 465 и, конечно, трижды проверил вводимое имя пользователя/пароль.

2. И чтобы добавить, что 2FA отключен в этой учетной записи, которая, как я читал, тоже может вызвать проблему…

3. Попробуйте переустановить smtplib или обновить его. Вы используете Pycharm?

4. Я использую Pycharm, версия 2021.1.2, сборка № 211.7442.45. Когда я проверял сейчас, никаких обновлений IDE или плагинов не было доступно.

5. В проекте, в котором вы работаете, на Pycharm перейдите в верхний левый угол и нажмите файл > настройки. Затем нажмите проект: ИМЯ. Перейдите в раздел интерпретатор проекта и в списке в поле найдите smtplib и посмотрите, нужны ли ему какие-либо обновления.