發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 = 'xxx@qq.com' #密碼郵箱的授權碼,不是你的QQ密碼,是要向騰訊申請的 password = 'fghjkjhgfdghj' #收件人地址 to_addr = ['yyy@qq.com','mmm@gmail.com']#多個收件人放在列表中 #郵箱服務器地址 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郵件
網段很重要,國內由於GREAT WALL的存在是發不了Google郵件的,VPN的選擇最好也是在美國,日本的VPN會出現no route host的報錯
import smtplib import base64 from email.header import Header from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import COMMASPACE SENDER = 'xxx@gmail.com'#發件人 SMTP_SERVER = 'smtp.gmail.com'#谷歌的郵件服務器,不要改 USER_ACCOUNT = {'username':'xxx@gmail.com', 'password':'發件人密碼'}#用於登陸的賬戶信息 SUBJECT = u"郵件標題" RECEVIVERS = ['xxx@qq.com']#收件人 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 MIMEMultipartfrom email.header import Header user = 'xxx@sina.com'#發件人 pwd = '49876545678'#發件人郵箱密碼 to = ['yyy@gmail.com',"mmm@gmail.com"]#收件人 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()