LINUX.ORG.RU

Отправка почты в Python через SMTP - не работает

 , ,


0

1

Беру простейший пример для Python по отправке почты через SMTP.

Пытаюсь отправить почту через gmail.com, на котором для отправки почты завел аккаунт.

# coding: utf8

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

toaddr = 'xintrea@gmail.com'
me = 'From: My Name'
you = 'To: ' + toaddr

server = 'smtp.gmail.com' # Сервер
port = 465 # Порты
user_name = '*****@gmail.com' # Отправитель
user_passwd = '*****' # Пароль отправителя

# Формируем заголовок письма
msg = MIMEMultipart('mixed')
msg['Subject'] = 'Заголовок письма'
msg['From'] = me
msg['To'] = toaddr

# Формируем письмо
part = MIMEText('Содержимое письма', 'Plain email')
msg.attach(part)

# Подключение
s = smtplib.SMTP(server, port)
s.ehlo()
s.starttls()
s.ehlo()
# Авторизация
s.login(user_name, user_passwd)
# Отправка письма
s.sendmail(me, toaddr, msg.as_string())
s.quit()

В данном коде надо установить значения аккаунта, от имени которого будет отправлено письмо гуглом:

user_name = '*****@gmail.com' # Отправитель
user_passwd = '*****' # Пароль отправителя

В результате выполнения скрипт зависает на строке:

# Подключение
s = smtplib.SMTP(server, port)

Жду несколько минут - ничего не происходит. Прерываю по Ctrl+C, вижу вывод:

$ python mail.py
^CTraceback (most recent call last):
  File "mail.py", line 27, in <module>
    s = smtplib.SMTP(server, port)
  File "/usr/lib/python2.7/smtplib.py", line 249, in __init__
    (code, msg) = self.connect(host, port)
  File "/usr/lib/python2.7/smtplib.py", line 310, in connect
    (code, msg) = self.getreply()
  File "/usr/lib/python2.7/smtplib.py", line 354, in getreply
    line = self.file.readline()
  File "/usr/lib/python2.7/socket.py", line 447, in readline
    data = self._sock.recv(self._rbufsize)
KeyboardInterrupt

В чем причина того, что скрипт не работает?

PS:

Пробовал отправить из PHP по SMTP согласно вот этой статье:

Настройка ssmtp для работы через gmail.com. Как отправить почту без почтового сервера

Все нормально отправляется, настройки для ssmtp те же, что и используемые в Python-скрипте.

Перемещено true_admin из web-development

★★★★★

Ответ на: комментарий от snoopcat

Жалко, что на лоре автору темы нельзя удалять бессмысленные комментарии. Толку от тебя ноль.

Xintrea ★★★★★
() автор топика

Смотри strace на оба скрипта и сравнивай выхлоп сетевых вызовов.

true_admin ★★★★★
()

С портом 587 (TLS/STARTTLS) нормально шлет. Точнее не отправляет нифига, потому что google блокирует вход, но вообще работает.

alozovskoy ★★★★★
()
Последнее исправление: alozovskoy (всего исправлений: 1)
Ответ на: комментарий от alozovskoy

Точно, а я пробовал 25-й и 465-й.

Xintrea ★★★★★
() автор топика

Стоп, такой код будет работать только 25-м портом, 465 это ssl. Тебе нужен smtplib.SMTP_SSL

true_admin ★★★★★
()

Используй STARTTLS , 587 порт. У меня на gmail скрипт на tcl пашет на ура

pavel38
()

Кроме того, что нужен SSL (как уже сказали), нужно, емнип, разрешить подключение сторонних приложений в настройках аккаунта (веб-интерфейс).

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.