Проблема расширения SMTP AUTH с Python - PullRequest
2 голосов
/ 25 мая 2011

Я пытаюсь написать простой скрипт на Python для отправки электронной почты через SMTP-сервер моей компании. Я использую следующий фрагмент кода.

#! /usr/local/bin/python

import sys,re,os,datetime
from smtplib import SMTP

#Email function
def sendEmail(message):
        sender="SENDERID@COMPANY.com"
        receivers=['REVEIVER1@COMPANY.com','RECEIVER2@COMPANY.com']
        subject="Daily Report - " + datetime.datetime.now().strftime("%d %b %y")
        header="""\
                From: %s
                To: %s
                Subject: %s

                %s""" % (sender, ", ".join(receivers), subject, message)
        smtp = SMTP()
        smtp.set_debuglevel(1)
        smtp.connect('X.X.X.X')
        smtp.ehlo()
        smtp.starttls()
        smtp.ehlo()
        try:
                smtp.login('SENDERID@COMPANY.com', '********')
                smtp.sendmail(sender,receivers,header)
                smtp.quit()
        except Exception, e:
                print e

#MAIN
sendEmail("HAHHAHAHAHAH!!!")

Запуск этой программы, дает этот результат.

connect: ('X.X.X.X', 25)
connect: ('X.X.X.X', 25)
reply: '220 COMPANY.com [ESMTP Server] service ready;ESMTP Server; 05/25/11 15:59:27\r\n'
reply: retcode (220); Msg: COMPANY.com [ESMTP Server] service ready;ESMTP Server; 05/25/11 15:59:27
connect: COMPANY.com [ESMTP Server] service ready;ESMTP Server; 05/25/11 15:59:27
send: 'ehlo SERVER1.COMPANY.com\r\n'
reply: '250-COMPANY.com\r\n'
reply: '250-SIZE 15728640\r\n'
reply: '250-8BITMIME\r\n'
reply: '250 STARTTLS\r\n'
reply: retcode (250); Msg: COMPANY.com
SIZE 15728640
8BITMIME
STARTTLS
send: 'STARTTLS\r\n'
reply: '220 Ready to start TLS\r\n'
reply: retcode (220); Msg: Ready to start TLS
send: 'ehlo SERVER2.COMPANY.com\r\n'
reply: '250-COMPANY.com\r\n'
reply: '250-SIZE 15728640\r\n'
reply: '250 8BITMIME\r\n'
reply: retcode (250); Msg: COMPANY.com
SIZE 15728640
8BITMIME
send: 'quit\r\n'
reply: '221 [ESMTP Server] service closing transmission channel\r\n'
reply: retcode (221); Msg: [ESMTP Server] service closing transmission channel
ERROR: Could not send email! Check the reason below.
SMTP AUTH extension not supported by server.

Как начать отладку этого «расширения SMTP AUTH, не поддерживаемого сервером». ошибка?

P.S .: Я знаю, что данные SMTP и учетные данные верны, поскольку у меня есть рабочий класс Java с точными деталями.

1 Ответ

8 голосов
/ 25 мая 2011

Полученная ошибка означает, что SMTP-сервер, с которым вы разговариваете, не претендует на поддержку аутентификации. Если вы посмотрите на выходные данные отладки, то увидите, что ни один из ответов на ваши EHLO не содержит необходимой декларации для AUTH. Если бы он (правильно) поддерживал аутентификацию, один из ответов был бы что-то вроде:

250 AUTH GSSAPI DIGEST-MD5 PLAIN

(по крайней мере в ответ на EHLO после STARTTLS.) Поскольку этот ответ не включен, smtplib предполагает, что сервер не сможет обработать команду AUTH, и откажется отправлять Это. Если вы уверены, что ваш SMTP-сервер поддерживает команду AUTH, даже если он не афиширует ее, вы можете хитро убедить smtplib, что она поддерживает AUTH, явно добавив ее в набор функций , Вам нужно знать, какие схемы аутентификации поддерживаются, и тогда вы можете сделать:

smtp.starttls()
smtp.ehlo()
# Pretend the SMTP server supports some forms of authentication.
smtp.esmtp_features['auth'] = 'LOGIN DIGEST-MD5 PLAIN'

... но, конечно, лучше настроить SMTP-сервер в соответствии со спецификацией:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...