2013-02-19 6 views
0
import smtplib 

fromaddress = '[email protected]' 
toaddress = [fromaddress] 
message = """ 
From: %s 
To: %s 
Subject: test 

Hello 

Goodbye 
""" % (fromaddress, toaddress) 

server = smtplib.SMTP('mydomain.com') 
server.set_debuglevel(1) 
server.sendmail(fromaddress, toaddress, message) 

Этот код открывает сокет ok, но затем сбой при отправке sendmail с ошибкой «Соединение неожиданно закрыто». От взгляда на smtplib source это происходит, когда пустой smtp-сервер возвращается.python smtplib sendmail failing

Что мне не хватает по вышеуказанному коду? Я запускаю это на дешевом веб-хосте в качестве скрипта cgi, и как часть их сервиса у них установлены службы sendmail и python. В своих документах у них есть стандартный пример отправки электронной почты в php, без проверки подлинности, поэтому я предполагаю, что то же самое должно работать для python.

У кого-нибудь есть понимание? Хост-хост-агент, если это помогает.

EDIT:

Основная ошибка сервера SMTP оформив жесткий сброс т.е. TCP 'сброса Подключение к одноранговой. В каких обстоятельствах сервер электронной почты это сделает?

+0

Это может закрыть соединение, если он решит, что сообщение является спамом. Например, если из адреса действительно «[email protected]». Или вы можете подключиться к неправильному серверу smtp. Проверьте обмен HELO и убедитесь, что у вас есть правильный сервер. Разрешает ли «mydomain.com» запись A, указывающую на SMTP-сервер хост-сервера? Наконец, попробуйте использовать telnet и запустить протокол SMTP вручную. Возможно, вы заметите сообщение об ошибке, которое имеет смысл. –

+0

no telnet access :( – user1561108

+0

Вам не нужен telnet-доступ к вашему серверу, вам просто нужен доступ к оболочке любого типа. После того, как вы вошли в ваш сервер, * затем * вы запустите «telnet mydomain.com 25». –

ответ

2

Я считаю, что toaddress должен быть списком.

fromaddress = '[email protected]' 
toaddress = [fromaddress] 
+1

, и я считаю, что должна быть пустая строка между заголовками и телом (т.е. после строки «Subject: ..») – isedev

+0

спасибо, ребята, сделали эти два изменения, но по-прежнему такие же проблемы – user1561108

2

Вы пытаетесь отправить через SMTP, который обычно выполняется с некоторой аутентификацией (имя пользователя и пароль). Большинство SMTP-серверов немедленно уничтожают соединение, если вы не аутентифицируете (или ваш IP-адрес не выполняет проверку подлинности слишком много раз в течение заданного интервала).

По телефону smtplib.SMTP([host[, port[, local_hostname[, timeout]]]]), вы пытаетесь открыть соединение с mydomain.com. Большинство веб-хостов будут иметь централизованную почтовую систему (SMTP/IMAP), которая также отделена от систем оболочки.

Я не отлаживал SMTP-материал через некоторое время (или использовал SMTP под Python), но вы соскучились, прыгнув в веб-хостинг и делая telnet mydomain.com 25, что должно позволить вам увидеть, согласен ли SMTP-сервер с вами получать соединения ... или просто уходит.

Вы также можете попробовать делать phpinfo() на вашем хостинг и увидеть, если у них есть какой-либо специальный материал аутентификации SMTP построен в.

Другого Кроме того, я хотел бы предложить вам попробовать трубопроводные сообщения в Sendmail (совместимые) бинарный, и пусть сервер обрабатывает SMTP.

это будет выглядеть примерно так ...

p= os.popen("/usr/sbin/sendmail -t -i -f" , "w") 
p.write(message) 
status = p.close() 
if status : 
    raise RuntimeError("Could not excecute sendmail properly") 
Смежные вопросы