文章目录

  • 使用python3查收与发送邮件
    • 基本配置及模块导入
    • 接收邮件
    • 发送邮件

使用python3查收与发送邮件

邮件的接收和发送是日常工作必备的内容,前一段时间我需要进行工作交接,从上万分邮件中找到和某些关键词相关的邮件,并以附件的形式发送给不同的人,一共有600多个这样的关键词,如果要手动执行,我需要手动执行600多次,这简直让人无法接收。因此为了自动化该过程,我学习了python3如何接收和发送邮件的过程,并试着完成该项目交接。中间遇到了各种各样的问题,由于同时我还要处理新的工作,只能利用业余时间来一一解决,例如由于网络问题导致的搜索中断,多次请求重试依然失败等情况,等完全处理完该任务已经是过了整整一周的时间!讲真的,这时间我手动搜索都该弄完了,但是,在我最终用该方法完成这个任务之后,我觉得下次如果再有用相似的工作,我可以很快就完成了,这种感觉可以用“我进化了!”来形容。但是如果我选择手动执行,那么下次再发送600封邮件的话,我依然需要和这次差不多长的时间来完成,更何况,我就很享受这种翻山越岭后瞬间的满足感与成就感呢,通过努力战胜枯燥的重复,这种感觉就很不一样呢。这么一想,我终于释然了。接下来记录从本项目中学习到的一些东西。

基本配置及模块导入

首先是需要开通邮箱的imap和smtp功能,即接收邮件和发送邮件的协议,我这里使用的是腾讯企业邮箱,在设置中勾选对应功能即可。

#configure
receive_host = 'imap.exmail.qq.com'
receive_port = 993
send_host = 'smtp.exmail.qq.com'
send_port = 465
user = 'your@email.com'
password = 'your_email_password'

接下来是导入我们需要用到的一些模块,以下都是built-in的模块,imaplib用于接收邮件,smtplib用于发送邮件,email用于解析邮件。

import imaplib
import email
import smtplib
import chardet
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.mime.application import MIMEApplication

接收邮件

不管是接收还是发送邮件,首先都要先登陆邮箱服务器,这里impalib提供了两种登陆方式,分别对应IMPA4IMPA4_SSL两个函数,我这里需要使用SSL的方式,这个可以在邮件的设置里面看到应该用哪个,或者你也不知道就用try...except... 的方式来实现就可以了。

   #login email clientclient = imaplib.IMAP4_SSL(receive_host,receive_port)client.login(user,password)

接下里显示所有的邮件箱,这里python3可以通过一下的转换编码的方式来显示中文命名的收信箱,但在选择收信箱的时候还是要用client.list()中的名字。

#show all inboxfor i in client.list()[1]:chinese_name = i.decode('utf-8').split(' "/" ')[1].replace('&','+').encode('utf-8').decode('utf-7')tag = i.decode('utf-8').split(' "/" ')[1]print('%s : %s' % (tag,chinese_name))

接下里就是选择收信箱并获取里面的邮件了,client.select()默认会选择INBOX也就是邮箱中默认就有的收信箱,你也可以选择其他的收信箱,然后我们可以通过client.search()来选择其中的部分或者全部的邮箱,这里选择全部的邮件。

#select a inboxinbox_info = client.select('INBOX')type,data = client.search(None,'ALL')total_emails = len(data[0].split())

接下来是下载邮件并解析邮件

for num in data[0].split():typ, data = M.fetch(num, '(RFC822)')print('Message %s\n%s\n' % (num, data[0][1]))if data and data != [None]:encoding = chardet.detect(data[0][1])msg = email.message_from_string(data[0][1].decode(encoding['encoding']))text,enc = email.header.decode_header(msg['subject'])[0]subject = text.decode(enc) if enc else text

最后我们可以保存下载的邮件

 with open(ofile,'wb') as odata:odata.write(data[0][1])

发送邮件

smtp_obj = smtplib.SMTP_SSL(send_host,send_port)
smtp_obj.login(user,password)
msg = MIMEMultipart()
msg['from'] = 'your@email.com'
msg['to'] = ";".join(recipients) #收信人
msg['cc'] = ";".join(cc) #抄送
msg['subject'] = subject #主题
content = MIMEText(text,'plain','utf-8') #正文
msg.attach(content)

也可以添加附件,但是附件不能超过50M

with open(f,'rb') as indata:part = MIMEApplication(indata.read())part.add_header('Content-Disposition', 'attachment', filename=f)msg.attach(part)

最后我们就可以发送邮件了

all_recipients = recipients + cc
smtp_obj.sendmail(msg['from'],all_recipients,str(msg))

使用python3查收与发送邮件相关推荐

  1. 【LoVissy学习笔记】用Python3.82自动发送邮件。QQ邮箱

    内容题要 用SMTP_SSL()或者.starttls()进行与服务器的安全连接 用python内置的smtplib 测试发送基本的邮件 发送HTML格式的内容 发送附件 结合CSV文件发送匹配到人的 ...

  2. python3邮件_Python3_发送邮件

    使用第三方库 yagmail 更新: 第三种方式的隐藏用户名和密码的方式,目前不再支持 简单介绍 目标是尽可能简单,无痛地发送电子邮件. 最终的代码如下: import yagmail yag = y ...

  3. python3实现自动发送邮件

    1 电子邮件协议 图来自计算机网络谢希仁一书 SMTP,用于用户向邮件服务器发送邮件或在邮件服务器之间发送邮件. POP3,用于用户从邮件服务器读取邮件,在客户端的操作(如移动邮件.标记已读等),不会 ...

  4. Python3.5 email发送邮件,包含txt、图片、HTML、附件

    直接套用代码即可 from email.mime.text import MIMEText from email.mime.image import MIMEImage from email.mime ...

  5. python发邮件详解_python实现发送邮件详解

    [Python]代码 #_*_encoding:utf-8_*_ #script for python3.2 #-------------------------------------------- ...

  6. Python3发送带图邮件

    我们常常会遇到需要通过脚本添加监控的情况,一般我们会选择使用邮件的方式通知相关人员. 一个简单的邮件我们可以轻松构建出来(可以参考我之前的文章<Python3使用smtplib发送邮件>) ...

  7. 腾讯云使用Python发邮件

    写在前面 我购买的腾讯云默认自带Python3.6.8版本,但是我自己重新编译安装了Python3.6.0版本 环境准备 下载Python3.6.0 [root@VM-0-17-centos ~]# ...

  8. 利用Python我发现我女朋友每天都在看这种网站

    需求: 很多人学习python,不知道从何学起. 很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手. 很多已经做案例的人,却不知道如何去学习更加高深的知识. 那么针对这三类人,我给 ...

  9. 清空网站浏览记录就行啦?看Python如何实时监控网站浏览记录

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 很多人学习python,不知道从何学起. 很多人学习python,掌握了基 ...

最新文章

  1. 转://点评Oracle11g新特性之动态变量窥视
  2. js foreach用法_使用 nodejs 写爬虫(一): 常用模块和 js 语法
  3. Oracle 体系结构2 - 共享和专用服务器
  4. 概要设计实例_尽可能通用的运维CMDB的设计与实践
  5. PAT1069. The Black Hole of Numbers
  6. BeetleX.Http.Clients V1.5发布
  7. 数组的合并和升序排列_区间调度问题之区间合并
  8. Ubuntu 创建快捷方式的方法
  9. lenovo X230热键功能
  10. 数据库原理及应用教程 第4版|微课版答案 陈志泊主编 课后习题答案
  11. maven项目打包命令
  12. Scan2CAD pro中文版
  13. pdn阻抗测试_阻抗测试基础(超详细,安捷伦工程师力作)(上篇)
  14. Could not start Tomcat
  15. 隐私信息检索(隐匿查询)
  16. 缓存文件可以放在哪里?它们各自的特点是什么?
  17. oracle12c数据库命令,oracle 12c 常用命令
  18. JAVA知识体系之JVM篇(新)
  19. Visual Studio Code使用教程
  20. 2018秋c语言程序设计考试答案,2018年自学考试《C语言程序设计》模拟试题【四篇】...

热门文章

  1. 史上最全的Uboot常用命令汇总(超全面!超详细!)收藏这一篇就够了
  2. 英语语法总结--虚拟语气
  3. 测试个人禀赋的软件,选出最有食欲的一碗米饭,测你哪方面“禀赋异禀”
  4. 已经两点求直线方程(多维空间)
  5. 计算机程序设计员技能试题,计算机程序设计员理论试题库
  6. 没想到Spring Boot + Vue 竟如此简单!
  7. double型数据与float型数据在内存中的存储
  8. Adobe CC 2019
  9. 文墨绘学21天习惯养成方法,学好就会优秀
  10. 给el-input type=“number“的文本框设置默认值