使用python smtplib发送邮件时出错
我正在尝试使用python 3.2 SMTPlib.sendmail()函数 在对SMTP库进行一些修改(即 注释掉正在抑制错误的rset()函数(msg) 我设法从服务器检索到以下错误消息: SendMail失败 (554,b‘交易失败:由于可能被滥用,无法发送消息;请访问了解更多信息’) yahoo mail SMTP服务器认为我在发送垃圾邮件,URL确实链接到任何东西 有用。我认为这与头球不足有关,我似乎找不到确切的答案 回答什么构成了兼容的标题&我已经读到了Gmail的类似问题。 这篇文章已被模拟电子邮件取代 任何帮助都将不胜感激 我的完整代码如下:使用python smtplib发送邮件时出错,python,email,smtp,python-3.2,yahoo-mail,Python,Email,Smtp,Python 3.2,Yahoo Mail,我正在尝试使用python 3.2 SMTPlib.sendmail()函数 在对SMTP库进行一些修改(即 注释掉正在抑制错误的rset()函数(msg) 我设法从服务器检索到以下错误消息: SendMail失败 (554,b‘交易失败:由于可能被滥用,无法发送消息;请访问了解更多信息’) yahoo mail 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)
self.message=email.message从字符串(“”)发送至:
发件人:
答复:
主题:测试发送邮件\n\n你好“”)
fromAddress=rwilson@yahoo.co.nz'
解决问题ksmith@yahoo.co.nz'
尝试:
self.smtp=smtp()
self.smtp.connect('smtp.mail.yahoo.com')
除例外情况外:
打印('连接失败')
打印(traceback.format_exc())
尝试:
self.smtp.login('rwilson','tree22')
除例外情况外:
打印('登录失败!')
打印(traceback.format_exc())
尝试:
self.smtp.sendmail(fromAddress,toAddress,self.message.as_string())
打印(“消息已成功发送!”)
self.smtp.close()
例外情况除外,如e:
打印('发送邮件失败')
打印(e)
在登录前将以下内容添加到您的代码中,然后重试
try:
self.smtp.ehlo()
self.smtp.starttls()
self.smtp.ehlo
except:
print "No TLS :("
#do login here
以下内容适用于Python 2.7和Python 3.2上的microsoft、google、yahoo帐户:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""Send email via smtp_host."""
import smtplib
from email.mime.text import MIMEText
from email.header import Header
####smtp_host = 'smtp.live.com' # microsoft
####smtp_host = 'smtp.gmail.com' # google
smtp_host = 'smtp.mail.yahoo.com' # yahoo
login, password = ...
recipients_emails = [login]
msg = MIMEText('body…', 'plain', 'utf-8')
msg['Subject'] = Header('subject…', 'utf-8')
msg['From'] = login
msg['To'] = ", ".join(recipients_emails)
s = smtplib.SMTP(smtp_host, 587, timeout=10)
s.set_debuglevel(1)
try:
s.starttls()
s.login(login, password)
s.sendmail(msg['From'], recipients_emails, msg.as_string())
finally:
s.quit()
我建议使用普通的
telnet
会话调试此问题:打开到SMTP服务器端口25的telnet连接,并尝试通过手动键入SMTP会话来传递邮件。如果这也不起作用,那么您的问题与Python的SMTPlib无关,您应该继续尝试找出SMTP服务器拒绝您的邮件作为垃圾邮件的原因。如果它确实有效,那么代码就有问题。使用诸如tcpdump
和/或Wireshark之类的数据包嗅探器,将普通SMTP会话与python代码导致的SMTP会话进行比较,找出区别。我已放弃尝试使用yahoo,上面的代码似乎可以使用SMTP.gmail.com。使用msg=MIMEMultipart()创建邮件时出错. 按照您的建议,使用msg=MIMEText('body…','plain','utf-8')定义消息解决了我的问题,并且我能够在消息中发送正文文本。谢谢