前言
在玩了一段時間樹莓派之后邑闲,突然想如果不在同一個局域網(wǎng)里面粪狼,怎么可以通過手機和樹莓派進(jìn)行一些信息的交互拄踪。通過查閱資料后,發(fā)現(xiàn)在python自帶的庫中有一個smtplib的包可以進(jìn)行郵件的發(fā)送崎弃,因此就想讓樹莓派以郵件的方式發(fā)送信息到手機。
解決方法
查看smtplib的文檔發(fā)現(xiàn)使用方法還是比較簡單的含潘,另外可以通過MIME來構(gòu)建郵件消息饲做,然后調(diào)用smtplib接口發(fā)送消息。因此遏弱,代碼的編寫總體來說還是很簡單盆均,網(wǎng)上也有許多的教程,這里就不對其中API的接口做過多的說明漱逸,后面直接上代碼泪姨。
由于用的是SMTP進(jìn)行郵件發(fā)送游沿,我們的郵箱大部分都默認(rèn)關(guān)閉了這個功能的,因此要正常的使用這個方法進(jìn)行郵件的發(fā)送需要對自己郵箱進(jìn)行配置肮砾,打開SMTP功能诀黍。這里,作者是使用的QQ郵箱(163郵箱也嘗試過仗处,但是沒有成功)蔗草,配置方法參考這里。在配置完成之后你可以得到你的授權(quán)密碼疆柔。
在配置好之后你就可以通過SMTP發(fā)送郵件了咒精。以下是自己的代碼,主要實現(xiàn)了文本消息和附件的發(fā)送旷档。
1 #!/usr/bin/python3
2
3 import smtplib
4 from email.mime.text import MIMEText
5 from email.mime.multipart import MIMEMultipart
6
7 email_host = 'smtp.qq.com'
8 email_port = 25
9 email_passwd = 'mubnncbdvvjgbccj' # 這個是發(fā)送QQ賬號的授權(quán)碼模叙,而不是QQ賬號的密碼,否則發(fā)送會失敗
10
11 sender = 'your_qq_count@qq.com' # 發(fā)送賬號
12 receivers = ['tester1@163.com', 'tester2@qq.com'] # 接收賬號
13
14 msg = MIMEMultipart()
15 msg['Subject'] = 'Just For Test'
16 msg['From'] = sender
17 msg['To'] = ';'.join(receivers)
18
19 msg_text = MIMEText(_text='hello, this email come from your_qq_count@qq.com', _subtype='plain', _charset='utf-8')
20 msg.attach(msg_text)
21
22 att = MIMEText(_text=open('./att.txt', 'rb').read(), _subtype='base64', _charset='utf-8')
23 att['Content-Type'] = 'application/octet-stream'
24 att['Content-Disposition'] = 'attachment; filename="att.txt"'
25 msg.attach(att)
26
27 try:
28 smtpObj = smtplib.SMTP(host=email_host, port=email_port)
29 smtpObj.login(sender, email_passwd)
30 smtpObj.sendmail(sender, receivers, msg.as_string())
31 print("Successfully sent email")
32 smtpObj.close()
33 except smtplib.SMTPException as e:
34 print("Error: unable to send email")
35 print(e)
總結(jié)
使用python發(fā)送郵件的方法并不難鞋屈,其中的關(guān)鍵是設(shè)置自己的郵箱范咨,開啟SMTP的功能,本文使用的QQ郵箱厂庇,并實際測試可以正常發(fā)送郵件渠啊,期間也嘗試使用163郵箱進(jìn)行發(fā)送,但是失敗了权旷,查看原因好像是說163郵箱只有VIP郵箱才可使用SMTP發(fā)送郵件替蛉,如果有讀者知道具體原因可以告知我一下,將不勝感激拄氯。
另外躲查,關(guān)于smtplib包和email包的具體使用可以參考官網(wǎng)。
參考
https://docs.python.org/3.6/library/smtplib.html
https://docs.python.org/3.6/library/email.html
https://jingyan.baidu.com/article/6079ad0eb14aaa28fe86db5a.html