发QQ邮件
首先确认发件方是否打开了SMTP服务,去QQ邮箱的设置中查看,如果没有请自行开启。
from email.header import Header from email.mime.text import MIMEText from email.utils import parseaddr,formataddr import smtplib from app01 import models def _format_addr(s): name,addr = parseaddr(s) return formataddr((Header(name,'utf-8').encode(),addr)) def send_mail(): four_hour_pro, eight_hour_pro = read() print(four_hour_pro) print(eight_hour_pro) print("Start sending") #发件人地址 from_addr = '[email protected]' #密码邮箱的授权码 password = 'zskhulrcyzarbada'#这个是我的授权码,你要用你的 #收件人地址 to_addr = ['[email protected]','[email protected]']#多个收件人放在列表中 #邮箱服务器地址 smtp_server = 'smtp.qq.com' #设置邮件信息 data = "Hello World" msg = MIMEText(data,'plain','utf-8') msg['From'] = _format_addr(from_addr) msg['To'] = _format_addr(to_addr) msg['Subject'] = Header(u'邮件标题','utf-8').encode() #发送邮件 server = smtplib.SMTP_SSL(smtp_server,465) #打印出和SMTP服务器交互的所有信息 server.set_debuglevel(1) #登录SMTP服务器 server.login(from_addr,password) #sendmail():发送邮件,由于可以一次发给多个人,所以传入一个list邮件正文是一个str,as_string()把MIMEText对象变成str。 server.sendmail(from_addr,to_addr,msg.as_string()) server.quit() print('Mail sended succeed!') if __name__ == '__main__': send_mail()
发Google邮件
import smtplib import base64 from email.header import Header from email.mime.text import MIMEText from email.utils import parseaddr,formataddr from email.mime.multipart import MIMEMultipart from email.mime.image import MIMEImage from email.utils import COMMASPACE from app01 import models SENDER = '[email protected]'#发件人 SMTP_SERVER = 'smtp.gmail.com'#谷歌的邮件服务器,不要改 USER_ACCOUNT = {'username':'[email protected]', 'password':'发件人密码'}#用于登陆的账户信息 SUBJECT = u"邮件标题" RECEVIVERS = ['[email protected]']#收件人 def send_mail(receivers=RECEVIVERS, sender=SENDER, user_account=USER_ACCOUNT, subject=SUBJECT): print("Start sending...") #设置邮件正文 data = "邮件正文内容" #下面都不用改 msg_root = MIMEMultipart() # 创建一个带附件的实例 msg_root['Subject'] = subject # 邮件主题 msg_root['To'] = COMMASPACE.join(receivers) # 接收者 msg_text = MIMEText(data, 'html', 'utf-8') # 邮件正文 msg_root.attach(msg_text) # attach邮件正文内容 smtp = smtplib.SMTP('smtp.gmail.com:587', timeout=10) smtp.ehlo() smtp.starttls() smtp.login(user_account['username'], user_account['password']) smtp.sendmail(sender, receivers, msg_root.as_string()) print("Email sended succeed!") if __name__ == '__main__': send_mail()
发Google邮件遇到的问题:邮件报错smtplib.smtpauthentic
出现这个错误的原因有两个:
- Google阻止用户使用不符合他们安全标准的应用或设备登陆gmail
https://support.google.com/accounts/answer/6010255?hl=zh-Hans - Gmail没有解除验证码认证
解决方法:
- 允许不够安全的应用使用您的账号:点击如下链接,开启“允许不够安全的应用”功能 https://myaccount.google.com/lesssecureapps
- 解除gmail验证码认证:
点击如下链接,然后点击继续即可
https://accounts.google.com/b/0/displayunlockcaptcha
发新浪邮件
记得先去你的设置中将SMTP权限开启
import smtplib from email.mime.text import MIMEText from email.mime.multipart import MIMEMultipart from email import encoders from email.header import Header from app01 import models from email.utils import COMMASPACE user = '[email protected]'#发件人 pwd = '49876545678'#发件人邮箱密码 to = ['[email protected]',"[email protected]"]#收件人 def send_mail(): print("Start sending...") msg = MIMEMultipart() msg['Subject'] = Header('成交信息', 'utf-8') msg['From'] = Header(user) data = "邮件正文内容" content1 = MIMEText(data, 'plain', 'utf-8') msg.attach(content1) s = smtplib.SMTP('smtp.sina.com') s.set_debuglevel(1) # 调试使用 # s.starttls() # 建议使用 s.login(user, pwd) s.sendmail(user, to, msg.as_string()) s.close() print("Sended succeed") if __name__ == '__main__': send_mail()