设为首页 收藏本站
查看: 1156|回复: 0

[经验分享] 用 Python 发邮件

[复制链接]

尚未签到

发表于 2018-8-8 09:59:19 | 显示全部楼层 |阅读模式
  用 Python 发邮件有什么用啊?
  1.可以和爬虫代码结合一下、譬如查 12306、查携程机票时可以设置查询到自动发邮件提醒
  2.程序猿们可以利用 Python 发邮件监控程序的运行,譬如有 bug 报错了,赶紧发个邮件提醒你,回来公司加班!
  3.搜集网上行业信息的,搜集到一堆邮箱,可以群发啊,做广告啊~(当然这样不太好)
  4.譬如我可以写一个暖心的小程序,让 Python 自动在恶劣天气,提醒亲朋好友注意加衣服,在生日时发送生日祝福。。。。。。
  果然 Python 大法好啊~
  本次,我们发邮件用到的 Python 库是 smtplib 和 email。简单来说,smtplib 库主要是用于负责和邮件服务器进行通讯,email 库则主要用于规定编写邮件的头、主体、内容、附件等。
  发邮件之前我们需要用 Python 登录 smtp 服务器,这样才能有发送权限,所以,我们需要去邮箱手动开启 smtp 服务,然后记住服务器授权码(授权码意思是,你可以不用我的网页邮箱或者邮箱 app 登录,你可以用邮箱账号+授权码在后台来获取邮箱服务器的内容)
DSC0000.jpg

  由于本次我们用 QQ 邮箱发送,你也可以用网易邮箱或者其他邮箱发送,原理都是类似~

如何开启QQ邮箱 smtp 服务器和获取授权码:
  转载自:jingyan.baidu.com/article/fed…
  很多场合都会用到邮箱授权码进行邮件的收取,现在讲一下如何 QQ 邮箱的授权码获取方式,网易邮箱的也差不多哦~
  工具/原料


  • 电脑版的 QQ 邮箱
  方法/步骤
  登录电脑版 QQ 邮箱,选择最上方的“设置”。
DSC0001.jpg

  如图选择“账户”,切换到账户详情页面。
DSC0002.jpg

  在账户页面往下拉,可以看到 pop3 设置,选择“开启”。
DSC0003.jpg

  按照弹出的窗口提示操作进行密保验证。有多种方式可以验证,比如手机令牌等。推荐使用短信验证。
DSC0004.jpg

  按照短信验证的提示发送短信。发送成功后直接点击“我已发送”。
DSC0005.jpg

  弹出的提示中直接显示 16 位的授权码,可以复制下来,或者是记下来,千万不要记错了。然后点击“确定”。
DSC0006.jpg

  下方的收取选项一般是默认 30 天的,点击下拉箭头,选择“全部”,并点击页面最下方的保存更改。千万别忘了点击保存,不然之前做的都白费了!
DSC0007.jpg

  最后就是到需要授权码的那些地方输入刚获得的 16 位授权码就可以了。

END
  注意事项


  • 操作完别忘了保存。
  • 授权码不要记错了。
  • 收取选项改为“全部”,不然无法导入所有的邮件。
  获取好服务器授权码后,我们就可以写代码了,本次发送一个简单的文字邮件,然后添加一张可爱猪的图片作为附件:
DSC0008.jpg

  程序运行结果:
DSC0009.jpg

  代码如下:
  

import smtplib  
from email import encoders
  
from email.mime.text import MIMEText
  
from email.mime.base import MIMEBase
  
from email.mime.multipart import MIMEMultipart
  
#sender是邮件发送人邮箱,passWord是服务器授权码,mail_host是服务器地址(这里是QQsmtp服务器)
  
sender = 'xxxxxxx@qq.com'#
  
passWord = 'xxx'
  
mail_host = 'smtp.qq.com'
  
#receivers是邮件接收人,用列表保存,可以添加多个
  
receivers = ['aaa@qq.com','bbb@163.com']
  

  
#设置email信息
  
msg = MIMEMultipart()
  
#邮件主题
  
msg['Subject'] = input(f"{'请输入邮件主题:'}")
  
#发送方信息
  
msg['From'] = sender
  
#邮件正文是MIMEText:
  
msg_content = input(f"{'请输入邮件主内容:'}")
  
msg.attach(MIMEText(msg_content, 'plain', 'utf-8'))
  
# 添加附件就是加上一个MIMEBase,从本地读取一个图片:
  
with open('/Users/xxx/1.jpg', 'rb') as f:
  # 设置附件的MIME和文件名,这里是jpg类型,可以换png或其他类型:
  mime = MIMEBase('image', 'jpg', filename='Lyon.png')
  # 加上必要的头信息:
  mime.add_header('Content-Disposition', 'attachment', filename='Lyon.png')
  mime.add_header('Content-ID', '<0>')
  mime.add_header('X-Attachment-Id', '0')
  # 把附件的内容读进来:
  mime.set_payload(f.read())
  # 用Base64编码:
  encoders.encode_base64(mime)
  # 添加到MIMEMultipart:
  msg.attach(mime)
  

  
#登录并发送邮件
  
try:
  #QQsmtp服务器的端口号为465或587
  s = smtplib.SMTP_SSL("smtp.qq.com", 465)
  s.set_debuglevel(1)
  s.login(sender,passWord)
  #给receivers列表中的联系人逐个发送邮件
  for i in range(len(receivers)):
  to = receivers
  msg['To'] = to
  s.sendmail(sender,to,msg.as_string())
  print('Success!')
  s.quit()
  print ("All emails have been sent over!")
  
except smtplib.SMTPException as e:
  print ("Falied,%s",e)
  

  原文链接请

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-548512-1-1.html 上篇帖子: python学习-re模块 下篇帖子: 理解Python中的if __name__ == '__main__'
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表