利用Python发送接收邮件

1.邮件相关概念

POP3:Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。

SMTP:Simple Mail Transfer Protocol,即简单邮件传输协议。

IMAP:Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。

tips:注意!!写代码发邮件时一定要注意不能频繁发送!容易被当做垃圾邮件被屏蔽!!

2.操作步骤–163邮箱为例

1)注册一个邮箱,开通POP3/SMTP/IMAP

设置第三方邮件客户端专用密码–授权码

注意找到各服务器域名

SMTP服务器:smtp.163.com

IMAP服务器:imap.163.com

2)保存密码

打开Python交互式解释器,存入你的邮件地址和密码,这个密码是授权码

import yagmailyagmail.register('bonnie@163.com', password)

3)发送邮件

2.3.1 发送第一封邮件

 yagmail.SMTP(user=用户名, host='smtp.163.com')

2.3.2发送带HTML样式的邮件

contents=[‘para1 content’,’para2 content’, ’<a href=’https://baidu.com’>百度网站</a>’]1.png

2.3.3 发送带附件的邮件

contents=[‘para1 content’,’para2 content’, ’<a href=’https://baidu..com’>百度网站</a>’,'2.png’]

2.3.4 发送嵌入图片的邮件

contents=[‘para1 content’,’para2 content’, yagmail.inline(’flower.png’)]

2.3.5 群发邮件

yag.send([‘bonnie@163.com’,’ammy12@163.com’],’this is an e-mail from big boss’, contents)

2.3.6 定时任务
定义任务函数:

def job():print('打工人在努力!')
schedule.every(10).minutes.do(job)while True:schedule.run_pending()time.sleep(2)

如:schedule.every().wednesday.at(’13:15’).do(job) 为每周的周三下午1点1刻执行打印“我在干活呢”任务指令。

4)读取邮件

2.4.1读取密码

从keyring中读取密码

password=keyring.get_password(‘yagmail’,’bonnie@163.com’)

对于163、126邮箱,需要提前配置一下

输入网址:http://config.mail.163.com/settings/imap/index.jsp?uid=bonnie@163.com

允许第三方客户端读取内容。

如配置完,从keyring中读取密码为None,建议更换qq邮箱收发邮件方式。

2.4.2读取所有邮件

Imbox(IMAP服务器地址, 邮箱地址, 密码, 是否开启SSL加密)
with Imbox('imap.163.com','bonnie@163.com',password) as imbox:all_inbox_messages = imbox.messages(unread = True)for uid,message in all_inbox_messages:print(message)

2.4.3 message的属性

message的属性有:

message.sent_from 发件人

message.sent_to 收件人

message.subject 主题

message.date 时间

message.body[‘plain’] 文本格式内容

message.body[‘html’] HTML格式内容

message.attachments 附件

2.4.4 查看不同类型的邮件

未读邮件:unread_inbox_messages = imbox.messages(unread=True)

红旗邮件:inbox_flageged_messages = imbox.messages(flagged=True)

某发件人邮件:inbox_messages_from = imbox.messages(sent_from=邮件地址)

某收件人邮件: inbox_messages_from = imbox.messages(sent_to=邮件地址)

2.4.5 按日期筛选邮件

date__lt 某天前

date__gt 某天后

date__on 指定某一天

message_before=imbox.messages(date_lt=datetime.date(2020,10,8))
message_after=imbox.messages(date_gt=datetime.date(2020,10,8))
messaage_on_date=imbox.message(date_on=datetime.date(2020,10,6))

3.操作步骤–以QQ邮箱为例

1)开通POP3/SMTP/IMAP服务

进入mail.qq.com,点击【设置】-【账户】-【POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务】,开启【POP3/SMTP服务】和【IMAP/SMTP服务】。

出现短信验证,发送短信,点击【我已发送】。

收到【授权码】,这个授权码将成为在本地python收发邮件的password,不是你的邮件登录密码噢!

2)发送邮件
1.设置授权码为密码,以下2种方式2选1即可。

yagmail.register('1808909711@qq.com','oyirsulvcbnueeie')#keyring.set_password('yagamil','1808909711@qq.com','oyirsulvcbnueeie')

2.写明发件人邮箱,SMTP服务器域名,qq邮箱的SMTP服务器域名为 smtp.qq.com。

yag=yagmail.SMTP(user='1808909711@qq.com',host='smtp.qq.com')

3.编辑内容。

contents=[‘周末好’,‘天天开心’]

4.写明收件人邮箱,标题和内容,完成发送。

yag.send('1808909711@qq.com','this e-mail is for you',contents)

3)接收邮件
1.确认密码

password=keyring.get_password('yagamil','1808909711@qq.com')print(password)

2.写明IMAP服务器地址–imap.qq.com,目标邮箱地址,授权码。

对所有未读邮件的所有参数进行读取。

with Imbox('imap.qq.com','1808909711@qq.com',password) as imbox:all_inbox_messages = imbox.messages(unread = True)for uid,message in all_inbox_messages:print(message)print("------------------")

其他与上述163邮箱收发邮件类似。

Python办公自动化之收发邮件--163和qq邮箱相关推荐

  1. node-red教程 8.2 node-red收发邮件(基于QQ邮箱)

    #8.2 node-red收发邮件-基于QQ邮箱 在一台联网的设备上,node-red可以使用邮箱控件来收发邮件.网上有很多教程都是基于外国的邮箱,这里介绍一个基于QQ邮箱的案例. ##8.2.1 邮 ...

  2. Python实战技巧(11)使用python收发邮件时需要的邮箱授权码如何获取

    Python实战技巧(1)Python字典类型数据如何递归地通过点'.'的方式访问 Python实战技巧(2)Python的pdb调试代码方法详解 Python实战技巧(3)多版本兼容安装部署(py2 ...

  3. 163、QQ邮箱收不到Github的邮件解决方法

    163.QQ邮箱收不到Github的邮件解决方法 20230505171221||300

  4. Java使用163和QQ邮箱发邮件

    "细雨梦回鸡塞远,小楼吹彻玉笙寒" 序 现在做的项目有做到流程审批,到下一节点时,会给节点的负责人发送邮件通知.流程都是手写的代码,没有用到流程引擎. 正文 其实通过QQ邮箱或者1 ...

  5. linux 发送邮件到163或者QQ邮箱

                                                               linux 发送邮件到163或者QQ邮箱 我想,在开始发送邮件前有些概念需要理解, ...

  6. qq邮箱收信服务器imap,普通IMAP、POP邮箱的设置 教你使用iPhone邮件客户端管理QQ邮箱...

    延伸:教你使用iPhone邮件客户端管理QQ邮箱 描述:...电脑,我们可以使用它来收发邮件,本教程为大家介绍如何iPhone/iPod touch上的邮件客户端收取QQ邮箱的邮件,这里以ipod t ...

  7. Spring Boot 整合163或者qq邮箱发送验证码

    前记 最近做的项目中注册功能要用到验证码,本来想用阿里云的短信服务,但是有点小贵,就另辟捷径,选择了用邮箱来发送验证码.记录一下整合过程,也希望能帮助一些有需要的人. 正文 1.Spring Boot ...

  8. springboot(07)邮件发送(qq邮箱)

    可以使用Spring Boot提供的spring-boot-starter-mail模块来发送QQ邮件 首先登录QQ邮箱>>>登录成功后找到设置>>>然后找到邮箱设 ...

  9. win10邮件中添加QQ邮箱无法成功

    win10邮件中添加QQ邮箱无法成功 1.登录QQ邮箱在设置->账户将IMAP由关闭改为开启 2.如果还是无法成功,点击生成授权码 3.出现如下界面后,使用手机发送短信,待发送成功后,点击我已发 ...

最新文章

  1. 一、ExtMail Solution概述--EXTMAIL
  2. 如何将Android的AOSP仓库放置到自己的gitlab服务器上?
  3. CV之路 —— Opencv学习
  4. reactjs定义组件:函数式组件
  5. 请求nginx静态资源报403
  6. Spark中如何管理Spark Streaming消费Kafka的偏移量
  7. mysql数字辅助表_关于数字的经典SQL编程问题:数字辅助表
  8. Unity 手机的旋转控制
  9. Selenium2(WebDriver)总结(一)---启动浏览器、设置profile加载插件
  10. django–url
  11. 吴恩达机器学习课程资源(笔记、中英文字幕视频、课后作业,提供百度云镜像!)
  12. 共享智能榨汁机器人_新橙派果汁机器人-让智能现榨果汁触手可及
  13. 渗透工具-masscan
  14. 在Word2019中不能插入公式的解决办法
  15. 学习笔记 Tianmao 篇 recyclerView 辅助的RecycleAdapterImpl类(适配Sliderview)
  16. winrar是不是计算机应用软件,请注意winrar不是一个免费软件。在40天的试用期结束后,你必须购买一个许可,或者将他从你的计算机中删除...
  17. tree是不是动词_动名词到底是动词还是名词?
  18. 电脑上如何快速将图片压缩变小?
  19. PAT-2021年春季乙级考试题解
  20. mysql error 1236_MySQL Error 1236 错误解决办法

热门文章

  1. 汶川地震死亡人数5月26日消息
  2. Android中设置定时闹钟以及AlarmManager详解
  3. ATPG之STIL格式说明
  4. 2021/8/13 又回到最初的起点
  5. mysql match against_mysql全文模糊搜索MATCH AGAINST方法
  6. 163个人电子邮箱免费注册,外贸邮箱用哪个比较好?
  7. Ubuntu 14.04~14.10 Linux 3D桌面完全教程,显卡驱动安装方法,compiz特效介绍,常见问题解答
  8. Possible missing firmware /lib/firmware/i915/kbl_guc_ver9_14.bin for module i915解决办法
  9. 常见html的标签含义(2)
  10. NBoot EBoot