Python日志记录.SMTP处理程序不工作



我想做的是创建一个单独的记录器,通过电子邮件发送错误日志。但是,每次我调用email_logger.error("…"(时,都会发生以下错误:

smtplib.SMTPNotSupportedError:服务器不支持SMTP AUTH扩展。

我使用的代码显示如下:

logging.basicConfig(level=logging.INFO, format='%(asctime)s :: %(funcName)s :: %(levelname)s :: %(message)s')
email_logger = logging.getLogger(__name__)
email_logger.setLevel(logging.WARNING)
with smtplib.SMTP('smtp.gmail.com', 587) as server:
server.ehlo()
server.starttls()
server.ehlo()
server.login('host_email@gmail.com', r'thisismypassword')
smtp_handler = logging.handlers.SMTPHandler(mailhost=('smtp.gmail.com', 587),
fromaddr='host_email@gmail.com',
toaddrs=['mymail@gmail.com'],
subject='A dashing subject',
credentials=('host_email@gmail.com',
r'thisismypassword'),
secure=None)
formatter = logging.Formatter('%(asctime)s : %(funcName)s : %(levelname)s : %(name)s : %(message)s')
smtp_handler.setFormatter(formatter)
email_logger.addHandler(smtp_handler)

我在通过日志模块向Amazon STMP服务器(Amazon SES(发送电子邮件时遇到了同样的问题。我使用secure=()解决了这个问题。

因为在向强制使用安全模式的STMP发送电子邮件时,secure选项不得为None。这是日志模块内部用于发送电子邮件的代码:

if self.username:
if self.secure is not None:
smtp.ehlo()
smtp.starttls(*self.secure)
smtp.ehlo()
smtp.login(self.username, self.password)
smtp.send_message(msg)
smtp.quit()

因此,为了在不向smtp.starttls传递参数的情况下使用安全模式,我将安全选项设置为(),它解决了我的问题:它正确地使用TLS连接向SMTP服务器发送电子邮件。

当我使用Gmail从Python发送电子邮件时,我使用:

server = smtplib.SMTP_SSL('smtp.gmail.com', 465) 

此外,尝试仅在常规python shell 中连接到服务器

server = smtplib.SMTP_SSL('smtp.gmail.com', 465) 
server.login(username, password)

要查看您的详细信息是否正确,您可能需要设置应用程序密码才能从应用程序使用Gmail,具体取决于您的安全设置

相关内容

最新更新