Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的SMTP身份验证扩展故障_Python_Email_Authentication_Smtp_Smtplib - Fatal编程技术网

Python中的SMTP身份验证扩展故障

Python中的SMTP身份验证扩展故障,python,email,authentication,smtp,smtplib,Python,Email,Authentication,Smtp,Smtplib,我正在尝试编写一个简单的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'

我正在尝试编写一个简单的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验证扩展”。错误


注意:我知道SMTP详细信息和凭据是正确的,因为我有一个具有确切详细信息的工作Java类。

您收到的错误意味着您正在与之交谈的SMTP服务器不声称支持身份验证。如果查看调试输出,您将看到对
EHLO
s的响应中没有一个包含
AUTH
的必要声明。如果它确实(正确地)支持身份验证,则其中一个响应将类似于:

250 AUTH GSSAPI DIGEST-MD5 PLAIN
(至少在响应
STARTTLS
之后的
EHLO
时)由于未包含该响应,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服务器按照规范运行会是一个更好的主意:)

啊,谢谢。你能给我一个所有可能的身份验证方法的列表,这样我就可以尝试每一种方法了吗?实际上没有一个完整的列表,但是Python只支持
CRAM-MD5
PLAIN
LOGIN
,所以没有必要尝试其他方法。我尝试了所有3种方法,但都不起作用。最后,我找到了这个SMTP包装器(),它的工作方式很有魅力。必须深入研究代码才能找出我做错了什么!听起来SMTP服务器根本不支持身份验证。你考虑删除登录呼叫吗?就是这样!那么这是否意味着我们的SMTP服务器不安全?