利用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

python接收新邮件 python自动接收邮件_发邮件

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

注意找到各服务器域名

SMTP服务器:smtp.163.com

IMAP服务器:imap.163.com

2)保存密码

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

import yagmail

yagmail.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接收新邮件 python自动接收邮件_发邮件_02


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

python接收新邮件 python自动接收邮件_服务器_03


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

python接收新邮件 python自动接收邮件_python_04


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邮箱收发邮件类似。