Найти - Пользователи
Полная версия: Отправка почты в Python через SMTP - не работает
Начало » Python для новичков » Отправка почты в Python через SMTP - не работает
1
xintrea
Беру простейший пример для 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-скрипте.
terabayt
плпробуйте 587 порт
server = smtplib.SMTP('smtp.gmail.com:587')
server.starttls()
server.login(user_name,user_passwd)
giveback
Для подключение к 465 порту нужно использовать SSL.

s = smtplib.SMTP_SSL('smtp.gmail.com', 465)
Kasta_neda
#!/usr/bin/python
#file mail.py
 
import smtplib
import sys
 
#Параметр, передаваемый при запуске скрипта:
txtparam= 'qwerty'                              
#От кого:
fromaddr = 'Mr. Robot <user@gmail.com>'
#Кому:
toaddr = 'Administrator <user@gmail.com>'
#Тема письма:
subj = 'Notification from system'
#Текст сообщения:
msg_txt = 'Notice:\n\n ' +  txtparam + '\n\nBye!' #
#Создаем письмо (заголовки и текст)
msg = "From: %s\nTo: %s\nSubject: %s\n\n%s"  % ( fromaddr, toaddr, subj, msg_txt)
 
#Логин gmail аккаунта. Пишем только имя ящика.
#Например, если почтовый ящик someaccount@gmail.com, пишем:
username = 'userl'
#Соответственно, пароль от ящика:
password = 'xxxxxxxxx'
 
#Инициализируем соединение с сервером gmail по протоколу smtp.
server = smtplib.SMTP('smtp.gmail.com:587')
#Выводим на консоль лог работы с сервером (для отладки)
server.set_debuglevel(1);
#Переводим соединение в защищенный режим (Transport Layer Security)
server.starttls()
#Проводим авторизацию:
server.login(username,password)
#Отправляем письмо:
server.sendmail(fromaddr, toaddr, msg)
#Закрываем соединение с сервером
server.quit()
xintrea
terabayt
плпробуйте 587 порт

Спасибо, все сработало с 587 портом.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB