提问人:Luka 提问时间:7/22/2023 最后编辑:Luka 更新时间:7/23/2023 访问量:148
如何使用 Python 发送电子邮件?
How send email with Python?
问:
执行以下代码后,它会显示一条消息“smtplib.SMTPAuthenticationError: (535, b'5.7.8 Error: authentication failed: UGFzc3dvcmQ6')“ 登录名和密码正确,专为测试而创建的电子邮件。登录失败的原因可能是什么?
import smtplib
mailFrom = "Test email sends"
mailTo = ["[email protected]"]
mailSubjest = "Test message"
mailBody = '''
email
test
test
'''
msg = '''From: {}
Subject: {}
{}
'''.format(mailFrom,mailSubjest,mailBody)
user = "[email protected]"
password = "pwd"
server = smtplib.SMTP_SSL('SMTP.poczta.onet.pl', 465)
server.ehlo()
server.login(user, password)
server.sendmail(user, mailTo, msg)
server.close()
我尝试过更改端口、电子邮件服务提供商和主机。启动程序后,将发送一封测试电子邮件。
server.set_debuglevel(1) 输出:
send: 'ehlo [192.168.0.19]\r\n'
reply: b'250-smtp.poczta.onet.pl\r\n'
reply: b'250-PIPELINING\r\n'
reply: b'250-SIZE 90000000\r\n'
reply: b'250-ETRN\r\n'
reply: b'250-AUTH PLAIN LOGIN XOAUTH2\r\n'
reply: b'250-AUTH=PLAIN LOGIN XOAUTH2\r\n'
reply: b'250-ENHANCEDSTATUSCODES\r\n'
reply: b'250 8BITMIME\r\n'
reply: retcode (250); Msg: b'smtp.poczta.onet.pl\nPIPELINING\nSIZE 90000000\nETRN\nAUTH PLAIN LOGIN XOAUTH2\nAUTH=PLAIN LOGIN XOAUTH2\nENHANCEDSTATUSCODES\n8BITMIME'
send: 'AUTH PLAIN AHB5dGhvbjEyMzMyMXRlc3Rvd3lAb3AucGwAUXdlcnR5MTIzNDU2Nzg5QEAh\r\n'
reply: b'535 5.7.8 Error: authentication failed: \r\n'
reply: retcode (535); Msg: b'5.7.8 Error: authentication failed:'
send: 'AUTH LOGIN cHl0aG9uMTIzMzIxdGVzdG93eUBvcC5wbA==\r\n'
reply: b'334 UGFzc3dvcmQ6\r\n'
reply: retcode (334); Msg: b'UGFzc3dvcmQ6'
send: 'UXdlcnR5MTIzNDU2Nzg5QEAh\r\n'
reply: b'535 5.7.8 Error: authentication failed: UGFzc3dvcmQ6\r\n'
reply: retcode (535); Msg: b'5.7.8 Error: authentication failed: UGFzc3dvcmQ6'
send: 'quit\r\n'
reply: b'221 2.0.0 Bye\r\n'
reply: retcode (221); Msg: b'2.0.0 Bye'
答:
0赞
AnFi
7/22/2023
#1
打开调试/跟踪 SMTP 会话。它经常提供更多提示。
使用set_debuglevel
在这个特定的SMTP服务器的情况下,我记得偶尔会拒绝每次登录尝试几个小时。它并不常见,但不是(非常)率AFAIR。
评论
0赞
Luka
7/23/2023
我使用set_debuglevel和广告输出来提问。
0赞
Luka
7/23/2023
#2
该问题已使用 Papercute 和 localhost 服务器 SMTP 解决。仅使用 Windows 进行执行。
法典:
import smtplib
def send_mail_python():
mailFrom = "[email protected]"
mailTo = ["[email protected]"]
mailSubjest = "Test message"
mailBody = '''
email
test
SMTP Python server
'''
msg = '''From: {}
Subject: {}
{}
'''.format(mailFrom, mailSubjest, mailBody)
try:
server = smtplib.SMTP('127.0.0.1', 25)
server.sendmail(mailFrom, mailTo, msg)
server.close()
except Exception as e:
print("any error messages to stdout")
print(e)
pass
解决方案未解决上述问题。它允许您在本地检查代码并执行测试。
评论