我想做的是创建一个单独的记录器,通过电子邮件发送错误日志。但是,每次我调用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,具体取决于您的安全设置