2014-09-08 2 views
0

Так что я пытаюсь отправлять письма через скрипт python. Он работает нормально, используя обычный формат адреса получателя «[email protected]». Когда я сейчас пытаюсь использовать скрипт с получателем «user @ [IP-Address], все мои выходные данные отладки выглядят хорошо, а метод sendmail работает, но почта никогда не принимается. Я получаю IP-адрес через dig от моего терминала .Отправлять почту на IP-адрес с помощью python

Это мой метод, ожидающий приемник в качестве параметра (вырезать некоторые маловажную вещи из зашифрованы и реальные адреса/учетные данные)

def sendmail(receiver): 
    msg = MIMEText('This is the body of the mail.') 
    msg['From'] = email.utils.formataddr(('me', myaddr)) 
    msg['To'] = email.utils.formataddr(('me', receiver)) 
    msg['Subject'] = "Python Mail Script" 


    server = smtplib.SMTP(smtpServer, smtpPort) 
    try: 
     server.set_debuglevel(True) 

     # identify ourselves, prompting server for supported features 
     server.ehlo() 

     # If we can encrypt this session, do it 
     if server.has_extn('STARTTLS'): 
      server.starttls() 
      server.ehlo() # re-identify ourselves over TLS connection 

     server.login("[email protected]", "...") 
     server.sendmail("[email protected]", toAddr, msg.as_string()) 
    finally: 
     server.quit() 

выход я получаю для отправки сообщения на IP-адрес является (снова я запутывал SMTP-сервер и почтовые/IP-адреса):

send: 'ehlo [127.0.1.1]\r\n' 
reply: '250-mail.example.de\r\n' 
reply: '250-PIPELINING\r\n' 
reply: '250-SIZE 102400000\r\n' 
reply: '250-VRFY\r\n' 
reply: '250-ETRN\r\n' 
reply: '250-STARTTLS\r\n' 
reply: '250-AUTH PLAIN LOGIN\r\n' 
reply: '250-AUTH=PLAIN LOGIN\r\n' 
reply: '250-ENHANCEDSTATUSCODES\r\n' 
reply: '250-8BITMIME\r\n' 
reply: '250 DSN\r\n' 
reply: retcode (250); Msg: mail.example.de 
PIPELINING 
SIZE 102400000 
VRFY 
ETRN 
STARTTLS 
AUTH PLAIN LOGIN 
AUTH=PLAIN LOGIN 
ENHANCEDSTATUSCODES 
8BITMIME 
DSN 
send: 'STARTTLS\r\n' 
reply: '220 2.0.0 Ready to start TLS\r\n' 
reply: retcode (220); Msg: 2.0.0 Ready to start TLS 
send: 'ehlo [127.0.1.1]\r\n' 
reply: '250-mail.example.de\r\n' 
reply: '250-PIPELINING\r\n' 
reply: '250-SIZE 102400000\r\n' 
reply: '250-VRFY\r\n' 
reply: '250-ETRN\r\n' 
reply: '250-AUTH PLAIN LOGIN\r\n' 
reply: '250-AUTH=PLAIN LOGIN\r\n' 
reply: '250-ENHANCEDSTATUSCODES\r\n' 
reply: '250-8BITMIME\r\n' 
reply: '250 DSN\r\n' 
reply: retcode (250); Msg: mail.example.de 
PIPELINING 
SIZE 102400000 
VRFY 
ETRN 
AUTH PLAIN LOGIN 
AUTH=PLAIN LOGIN 
ENHANCEDSTATUSCODES 
8BITMIME 
DSN 
send: 'AUTH PLAIN AHRob21hc0B0b3Jh6feldi5kZQBiYWdpbmVy\r\n' 
reply: '235 2.7.0 Authentication successful\r\n' 
reply: retcode (235); Msg: 2.7.0 Authentication successful 
send: 'mail FROM:<[email protected]> size=234\r\n' 
reply: '250 2.1.0 Ok\r\n' 
reply: retcode (250); Msg: 2.1.0 Ok 
send: 'rcpt TO:<[email protected][IP-ADDRESS]>\r\n' 
reply: '250 2.1.5 Ok\r\n' 
reply: retcode (250); Msg: 2.1.5 Ok 
send: 'data\r\n' 
reply: '354 End data with <CR><LF>.<CR><LF>\r\n' 
reply: retcode (354); Msg: End data with <CR><LF>.<CR><LF> 
data: (354, 'End data with <CR><LF>.<CR><LF>') 
send: 'Content-Type: text/plain; charset="us-ascii"\r\nMIME-Version: 1.0\r\nContent-Transfer-Encoding: 7bit\r\nFrom: me <[email protected]>\r\nTo: me <[email protected][IP-ADDRESS]>\r\nSubject: Python Mail Script\r\n\r\nThis is the body of the mail.\r\n.\r\n' 
reply: '250 2.0.0 Ok: queued as 4C5A78560196\r\n' 
reply: retcode (250); Msg: 2.0.0 Ok: queued as 4C5A78560196 
data: (250, '2.0.0 Ok: queued as 4C5A78560196') 
send: 'quit\r\n' 
reply: '221 2.0.0 Bye\r\n' 
reply: retcode (221); Msg: 2.0.0 Bye 

Любой, кто видит какую-либо ошибку или ошибку?

Редактировать: Используя собственный постфикс-сервер smtp в университете (к сожалению, нет доступа к внешнему миру) и отправки почты пользователю @ [IP-ADDRESS] этого самого сервера приходит почта. Вероятно, еще один признак того, что в проблемном случае, указанном выше, smtp-сервер получателя просто не разрешает IP-адрес в качестве адресата.

Edit2: /var/log/mail.log

mail.log:Sep 9 00:34:06 mail postfix/qmgr[4854]: A30168560199: from=<[email protected]>, size=1197, nrcpt=1 (queue active) 

mail.log:Sep 9 00:34:06 mail postfix/smtp[19355]: A30168560199: to=<[email protected][IP-ADDRESS]>, relay=none, delay=314, delays=313/0.04/0.01/0, dsn=4.4.1, status=deferred (connect to IP-ADDRESS[IP-ADDRESS]:25: Connection refused) 

mail.log:Sep 9 00:38:31 mail postfix/smtpd[19907]: warning: Illegal address syntax from my_host_where_the_python_script_runs[IP of me] in RCPT command: <[email protected]> 

Таким образом, соединение с сервером SMTP я использую на сервер получателя отказывается и 4 минуты спустя SMTP демон говорит, что получил неправильный синтаксис хотя в рукопожатии, где я отправляю по моему сценарию, он говорит 250 Ok ... Так что в основном я думаю, что SMTP-получатель отказывается от него. Thx guys

+3

Хотя это технически поддерживается RFC, возможно, хост электронной почты просто не принимает сообщения, отправленные таким образом. Это возможная тактика спама для отправки сообщений на общедоступные IP-адреса, которые принимают входящие SMTP-соединения, без фактического знания допустимого целевого домена. – admdrew

+0

Что показывает журнал сообщений? (Если unix,/var/log/maillog) – user590028

+0

Проблема: у меня нет доступа к smtp-серверу, который я использую для отправки этих писем. Обратившись к админу, он может отправить мне журнал. @admdrew у вас есть и действительная точка, это может быть проблемой –

ответ

1

Доменные имена в адресах электронной почты во многом напоминают доменные имена для веб-сайтов - один сервер на одном IP-адресе часто несет ответственность за множество разных доменных имен, и поэтому в этих случаях вы должны указать имя в своем запрос. Например, почтовый сервер 1.2.3.4 может обслуживать как abc.com, так и xyz.com. Если вы скажете RCPT TO: <[email protected][1.2.3.4]>, сервер не имеет понятия, если вы пытаетесь достичь [email protected] или [email protected]. Сервер может произвольно выбрать один (и угадать неправильно), принять сообщение и отбросить его, или отклонить сообщение.

Если вы каким-то образом не проверили с оператором сервера, что сервер доставляет [email protected][ip] -адресные сообщения в ожидаемый домен, вы не должны предполагать, что он это сделает.

+0

' Сервер может произвольно выбрать один' Мне на самом деле интересно, если бы это было так. – admdrew

+0

Хороший момент, спасибо! –

Смежные вопросы