我正在尝试使用Python 3.2的SMTPlib.sendmail()函数发送消息,在修改SMTP库后(即注释掉压制错误信息的rset()函数),我设法从服务器检索到以下错误消息:
SendMail失败 (554,b“事务失败:由于可能存在滥用,无法发送消息;请访问http://postmaster.yahoo.com/abuse_smtp.html获取更多信息”)
雅虎邮件SMTP服务器认为我在发送垃圾邮件,该URL没有链接到任何有用信息。 我认为这与不充分的标头有关,我似乎找不到关于什么构成符合性标头的明确答案,并且我已经阅读了类似Gmail的问题。 这里使用模拟电子邮件进行了替换。
任何帮助将不胜感激
我的完整代码如下:
self.message = email.message_from_string('''To: <ksmith@yahoo.co.nz>
From: <rwilson@yahoo.co.nz>
Reply-To: <rwilson@yahoo.co.nz>
Subject: Test send mail \n\n Hello''')
fromAddress = 'rwilson@yahoo.co.nz'
toAddress = 'ksmith@yahoo.co.nz'
try:
self.smtp = SMTP()
self.smtp.connect('smtp.mail.yahoo.com')
except Exception:
print('Connection Failed')
print(traceback.format_exc())
try:
self.smtp.login('rwilson','tree22')
except Exception:
print('Login Failed!')
print(traceback.format_exc())
try:
self.smtp.sendmail(fromAddress,toAddress ,self.message.as_string())
print("Message sucessfully sent!")
self.smtp.close()
except Exception as e:
print('SendMail Failed')
print(e)
telnet
会话来调试问题:打开到 SMTP 服务器端口 25 的 telnet 连接,尝试通过手动输入 SMTP 对话来发送邮件。如果这也不起作用,那么您的问题与 Python 的 SMTPlib 没有任何关系,您应该继续尝试找出为什么 SMTP 服务器将您的邮件拒绝为垃圾邮件。如果它确实有效,则存在代码问题。使用像tcpdump
和/或 Wireshark 这样的数据包嗅探器,比较您的普通 SMTP 会话和由您的 Python 代码引起的 SMTP 对话,以找出差异。 - Lukas Graf