2016-05-16 1 views
0

Мы запускаем ночной скрипт для отправки электронных писем кучам людей в нашей компании. Несколько дней назад соединение было открыто в течение длительного периода времени и в конечном итоге было отключено, и с тех пор мы не смогли использовать тот же код на одном компьютере для подключения к серверу обмена SMTP. Django настроен на использование одних и тех же точных настроек, работает на одном сервере и продолжает отправлять сообщения об ошибках. Кроме того, запустив тот же код на другом сервере, мы все еще можем подключать и отправлять электронные письма. Я совершенно недоумеваю относительно причин и потенциальных решений.Python SMTPLib больше не может аутентифицироваться, но django все равно может отправлять электронные письма на одном компьютере

Tl; др:

  • Python SMTPlib работал отлично на этом сервере до истечения времени ожидания несколько дней назад
  • Джанго могут отправлять сообщения электронной почты с того же сервера с той же информацией аутентификации
  • The тот же самый код с той же информацией входа все еще проверяет подлинность при запуске на другом сервере

разъем E-mail:

class Email_Connect(object): 
    def __init__(self): 
     self.user = "mydomain\myuser" 
     self.pwd = "mypassword" 
     self.send_from = '[email protected]' 
     self.local_hostname = socket.getfqdn() 

    def smtp_conn(self,server='myrelay.mycompany.net'): 
     self.c = smtplib.SMTP(server, local_hostname=self.local_hostname) 
     self.c.set_debuglevel(1) 
     self.c.ehlo() 
     self.c.starttls() 
     self.c.ehlo() 
     self.c.login(self.user, self.pwd) 

Код называется так:

emailer = common.Email_Connect() 
emailer.smtp_conn() 
emailer.send_email(send_to,msg_subject,msg_body,None,attachment) 
emailer.close() 

Джанго Настройки почты (рабочие штрафа на той же машине):

DEFAULT_FROM_EMAIL = '[email protected]' 
SERVER_EMAIL = '[email protected]' 
EMAIL_USE_TLS = True 
EMAIL_HOST = "myrelay.mycompany.net" 
EMAIL_HOST_USER = "myuser" 
EMAIL_HOST_PASSWORD = "mypassword" 

А вот это полный отладочный вывод о выполнении кода:

(production) c:\site\production\web\core>python program_replication.py 
(21, 'send spool email reports') 
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 
send: 'ehlo mycomputer.mycompany.net\r\n' 
reply: '250-smtp.mycompany.net Hello [10.1.*.*]\r\n' 
reply: '250-SIZE 31457280\r\n' 
reply: '250-PIPELINING\r\n' 
reply: '250-DSN\r\n' 
reply: '250-ENHANCEDSTATUSCODES\r\n' 
reply: '250-STARTTLS\r\n' 
reply: '250-AUTH\r\n' 
reply: '250-8BITMIME\r\n' 
reply: '250-BINARYMIME\r\n' 
reply: '250-CHUNKING\r\n' 
reply: '250-XEXCH50\r\n' 
reply: '250 XSHADOW\r\n' 
reply: retcode (250); Msg: smtp.mycompany.net Hello [10.1.*.*] 
SIZE 31457280 
PIPELINING 
DSN 
ENHANCEDSTATUSCODES 
STARTTLS 
AUTH 
8BITMIME 
BINARYMIME 
CHUNKING 
XEXCH50 
XSHADOW 
send: 'STARTTLS\r\n' 
reply: '220 2.0.0 SMTP server ready\r\n' 
reply: retcode (220); Msg: 2.0.0 SMTP server ready 
send: 'ehlo mycomputer.mycompany.net\r\n' 
reply: '250-smtp.mycompany.net Hello [10.1.*.*]\r\n' 
reply: '250-SIZE 31457280\r\n' 
reply: '250-PIPELINING\r\n' 
reply: '250-DSN\r\n' 
reply: '250-ENHANCEDSTATUSCODES\r\n' 
reply: '250-AUTH\r\n' 
reply: '250-8BITMIME\r\n' 
reply: '250-BINARYMIME\r\n' 
reply: '250-CHUNKING\r\n' 
reply: '250-XEXCH50\r\n' 
reply: '250 XSHADOW\r\n' 
reply: retcode (250); Msg: smtp.mycompany.net Hello [10.1.*.*] 
SIZE 31457280 
PIPELINING 
DSN 
ENHANCEDSTATUSCODES 
AUTH 
8BITMIME 
BINARYMIME 
CHUNKING 
XEXCH50 
XSHADOW 
ERROR: No suitable authentication method found. replication module send spool email reports failed to run 

ответ

0

Таким образом, эта проблема возникает из-за того, что Exchange ожидает проверку подлинности Windows ra чем команда LOGIN. Мне посчастливилось прокомментировать строку login(), и теперь я могу успешно отправить электронное письмо.

Я до сих пор не знаю, почему этот код использовался для успешного запуска и внезапно прекратил работу, но разрешение состоит в том, чтобы сохранить все как есть и прекратить передачу команды входа.

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