使用python發送郵件

發送郵件這個功能很是實用,好比你寫了一個爬蟲,能夠經過郵件來接收程序異常或者任務完成的通知,再好比你搭了一個網站,別人只需留下他的郵箱,你就能夠自動給他發送郵件。html

總之我以爲郵件通知很是適合那些處理批量、大量任務,你能夠不用守在電腦前等待處理結果,在程序裏配置好郵件通知後,只需留意郵箱通知就行了。python

下面咱們一塊兒來看看如何使用 python 來實現郵件發送,郵件通常分爲純文本郵件、html 郵件、以及帶附件郵件,今天咱們使用 python 來分別實現這三種郵件的發送。bash

在 python 實現發送郵件須要兩個模塊,分別是 smtplib 和 email,這兩個模塊都是內置的,不須要本身安裝,直接 import 導入便可。服務器

email 主要是用來構建郵件的,好比郵件收發人、郵件標題、郵件正文以及附件啥的,smtplib 則是用來發送郵件的。app

這裏咱們使用 qq 郵箱來做爲發件郵箱,在使用前,須要簡單的配置下 qq 郵箱。函數

打開 qq 郵箱,依次找到 設置 -> 帳戶,而後檢查 POP3/SMTP 服 務是否開啓。網站

若是沒開啓則開啓,根據提示開啓以後咱們須要獲取受權碼,這個受權碼下面咱們會要用到的,這一步只要獲取到受權碼就好了。ui

咱們先來實現一個簡單的純文本郵件發送,我這裏只把一些關鍵的代碼解釋一下,文章最後面再附上完整的源碼。spa

  • 純文本郵件

首先就是使用 email 模塊構建郵件,plain 即表明文本郵件,郵件構建完後,再使用 smtplib 發送郵件。code

#構建純文本郵件
from email.mime.text import MIMEText  
from email.header import Header
msg = MIMEText('我是郵件正文...', 'plain', 'utf-8') # plain 表示純文本郵件 
msg['From'] = "這裏是發件者郵箱"
msg['To'] = "這裏是收件者郵箱"
msg['Subject'] = Header("我是郵件的標題", 'utf-8') #郵件標題

#使用smtplib模塊發送郵件
email_client = smtplib.SMTP("smtp.qq.com")
email_client.login("這裏是發件者郵箱", "這裏就是上面提到獲取到的受權碼")
email_client.sendmail("這裏是發件者郵箱", "這裏是收件件者郵箱", msg.as_string())
email_client.quit()
複製代碼

發送郵件的時候有兩個須要注意的地方,一個是 smtplib.SMTP 的郵件服務器設置。

這裏咱們用的 qq 郵箱做爲發件郵箱,因此設置爲 smtp.qq.com,若是是其餘郵箱如網易郵箱,則須要設置爲 smtp.163.com。

再一個須要注意的就是 login 方法了,這個登陸方法裏的第二個參數是指上面提到的受權碼,並非你發件郵箱的登陸密碼。

  • html 郵件

html 郵件主要是能夠給郵件內容定義更豐富的樣式,並且能夠很方便的插入連接。html 郵件和純文本郵件大同小異,把完整的 html 內容做爲文本內容就行,再把 plain 改成 html 類型便可。

#構建html郵件
content = '<html><body><h3>Hello,這是一封 html 郵件,點擊連接能夠去看個人博客哈。</h3>' + '<p><a href="www.weatherfood.com">譚某人的博客</a></p>' + '</body></html>'
puretext = MIMEText(content, 'html', 'utf-8')  
複製代碼
  • 附件郵件

附件郵件稍微麻煩一些,在構建郵件對象的時候,就須要聲明構建一個附件郵件對象,msg = MIMEMultipart(),而後再添加 MIMEText 做爲郵件正文,最後再把 MIMEApplication 做爲附件加入便可。

  • 完整源碼

最後我再附上一份完整的帶圖片附件且正文爲 html 的郵件發送源碼,注意把源碼中的發件郵箱改爲你本身的郵箱,並獲取發件郵箱的受權碼。

# coding=utf-8

import smtplib  
from email.mime.text import MIMEText  
from email.header import Header
from email.mime.application import MIMEApplication
from email.mime.multipart import MIMEMultipart  


#郵件發送函數
#SMTPHost 郵件服務器
#fromAccount 發件郵箱
#fromPasswd 發件郵件受權碼,注意並非郵箱登陸密碼
#toAccount 收件郵箱
#subject 郵件標題
#content 郵件正文

def sendMail(SMTPHost, fromAccount, fromPasswd, toAccount, subject, content):    

    #構建郵件
    msg = MIMEMultipart()
    msg['Subject'] = Header(subject, 'utf-8')
    msg['From'] = fromAccount
    msg['To'] = toAccount

    content = '<html><body><h3>Hello,這是一封 html 郵件,點擊連接能夠去看個人博客哈。</h3>' + '<p><a href="www.weatherfood.com">譚某人的博客</a></p>' + '</body></html>'
    puretext = MIMEText(content, 'html', 'utf-8')

    msg.attach(puretext)


    # 附件
    xlsxpart = MIMEApplication(open('tim.jpg', 'rb').read()) #這裏填寫你本身目錄下的附件文件
    xlsxpart.add_header('Content-Disposition', 'attachment', filename='tim.jpg')
    msg.attach(xlsxpart)

    #使用smtplib模塊發送郵件
    email_client = smtplib.SMTP(SMTPHost)
    email_client.login(fromAccount, fromPasswd)
    email_client.sendmail(fromAccount, toAccount, msg.as_string())
    email_client.quit()


#主函數
if __name__ == '__main__':
   sendMail(
       'smtp.qq.com',
       '********@qq.com',#你的郵箱
       '**********',#受權碼
       'playactors@163.com',
       '很開心你來看個人文章了,歡迎關注哦。',
       '文章中有疑問的地方,歡迎留言與我聯繫哈,感謝你的支持!'
    )
複製代碼

有問題歡迎在下面留言交流,也歡迎關注,若是以爲對你有幫助就點個贊吧,感謝支持。

相關文章
相關標籤/搜索