Python SMTPLib больше не может аутентифицироваться, но django все еще может отправлять электронные письма на той же машине

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

Tl;dr:

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

Соединитель электронной почты:

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()

Настройки почты Django (отлично работают на том же компьютере):

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

person Hawk    schedule 16.05.2016    source источник


Ответы (1)


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

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

person Hawk    schedule 16.05.2016