在树莓派中使用python发送邮件

前言

在玩了一段时间树莓派之后,突然想如果不在同一个局域网里面,怎么可以通过手机和树莓派进行一些信息的交互。通过查阅资料后,发现在python自带的库中有一个smtplib的包可以进行邮件的发送,因此就想让树莓派以邮件的方式发送信息到手机。

解决方法

查看smtplib的文档发现使用方法还是比较简单的,另外可以通过MIME来构建邮件消息,然后调用smtplib接口发送消息。因此,代码的编写总体来说还是很简单,网上也有许多的教程,这里就不对其中API的接口做过多的说明,后面直接上代码。
由于用的是SMTP进行邮件发送,我们的邮箱大部分都默认关闭了这个功能的,因此要正常的使用这个方法进行邮件的发送需要对自己邮箱进行配置,打开SMTP功能。这里,作者是使用的QQ邮箱(163邮箱也尝试过,但是没有成功),配置方法参考这里。在配置完成之后你可以得到你的授权密码。
在配置好之后你就可以通过SMTP发送邮件了。以下是自己的代码,主要实现了文本消息和附件的发送。

  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'  # 这个是发送QQ账号的授权码,而不是QQ账号的密码,否则发送会失败
 10
 11 sender = '[email protected]'  # 发送账号
 12 receivers = ['[email protected]', '[email protected]']  # 接收账号
 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 [email protected]', _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)

总结

使用python发送邮件的方法并不难,其中的关键是设置自己的邮箱,开启SMTP的功能,本文使用的QQ邮箱,并实际测试可以正常发送邮件,期间也尝试使用163邮箱进行发送,但是失败了,查看原因好像是说163邮箱只有VIP邮箱才可使用SMTP发送邮件,如果有读者知道具体原因可以告知我一下,将不胜感激。
另外,关于smtplib包和email包的具体使用可以参考官网。

参考

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

你可能感兴趣的:(在树莓派中使用python发送邮件)