用python發郵件實例


發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

  出現這個錯誤的原因有兩個:

  解決方法:

發新浪郵件

  記得先去你的設置中將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()

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM