前提是已经通过yagmail设置好密码了
import os
os.chdir("D:\\python_major\\auto_office")
import keyring
password = keyring.get_password("yagmail","[email protected]")
print(password)
–> 输出结果为: 00000000(当初设置的授权码)
对于163、126邮箱,需要提前设置一下
网址:https://config.mail.163.com/settings/imap/[email protected]
注意:将最后的uid换成自己的账号就可以了;谷歌和火狐浏览器会屏蔽这个链接,只需要忽视它继续运行就可以了
解除屏蔽后的界面
lmbox(IMAP服务器地址,邮箱地址,密码,是否开启SSL加密)
import os
os.chdir("D:\\python_major\\auto_office")
from imbox import Imbox
import keyring
pwd = keyring.get_password('yagmail','[email protected]')
with Imbox('imap.163.com','[email protected]',pwd,ssl=True) as imbox:
all_inbox_messages = imbox.messages()
for uid, message in all_inbox_messages:
print(message.subject)
print(message.body['plain'])
message.sent_from 发件人
message.sent_to 收件人
message.subject 主题
message.date 时间
message.body[‘plain’] 文本格式内容
message.body[‘html’] html格式内容
message.attchments 附件
unread_inbox_messages = imbox.messages(unread = True)
inbox_flagged _messages = imbox.messages(flagged = True)
inbox_messages_from = imbox.messages(sent_from="[email protected]")
inbox_messages_to = imbox.messages(sent_to = '[email protected]')
date__lt 某天前
date__gt 某天后
date__on 指定某一天
inbox_messages_received_before = imbox.messages(date__lt = datetime.date(2020,1,31))
inbox_messages_received_after = imbox.messages(date__gt = datetime.date(2020,1,31))
inbox_messages_received_on_date = imbox.messages(date__on = datetime.date(2020,1,31))
标记已读: imbox.mark_seen(uid)
删除邮件: imbox.delete(uid)
for uid,message in all_inbox_messages:
if '满足某种条件的邮件':
imbox.delete(uid)
编写一个程序,要求:
(1)每分钟读一次邮件
(2)如果发件人是自己,邮件主题是’每日新闻一条’
(3)将新闻内容发送邮件到另一个邮箱
关于第一个要求,在调试的过程中发现,系统获取主题的时候是从最开始时间获取的,由于自己的往期邮件较多,而且获取新闻是最近进行的,因此这中间的跨度有点大,系统运行的时间比较长,为了调试方便,将要求一改成了最近的时间进行调试,关于要求二中,其实发件人就是自己,这一步直接在筛选主题的时候加上一个and做并列筛选就可以了
import os
os.chdir("D:\\python_major\\auto_office_1")
from imbox import Imbox
import keyring
import schedule
import time
import yagmail
该部分代码完成的工作是:设置程序运行路径,加载相关的库
def send_mail():
pwd = keyring.get_password('yagmail','[email protected]')
with Imbox('imap.163.com','[email protected]',pwd,ssl=True) as imbox:
all_inbox_messages = imbox.messages()
for uid, message in all_inbox_messages:
#print(message.subject)
if message.subject == '每日新闻一条' and message.sent_from[0]['email'] == '[email protected]':
#print(message.body['plain'])
yag = yagmail.SMTP(user = '[email protected]', host = 'smtp.163.com')
contents = message.body['plain']
yag.send('[email protected]','每日新闻一条',contents)
print('发送成功')
#代码运行此处是没有问题的
在准备工作完成之后运行这段代码也是可以直接将邮件发送成功的
schedule.every().day.at('01:17').do(send_mail)
start = time.perf_counter()
while True:
schedule.run_pending()
end = time.perf_counter()
print('程序运行一次共用时:{:.2f}s'.format(end - start))
time.sleep(1)
这里为了调试成功,选择了最近的时间,可以在成功之后将定时的时间按照要求进行改正,为了可视化进程可以设置一个计时输出,还是一样,邮件发送成功后记得将最后的定时任务给注释掉
全部代码如下
import keyring
import schedule
import time
import yagmail
def send_mail():
pwd = keyring.get_password('yagmail','[email protected]')
with Imbox('imap.163.com','[email protected]',pwd,ssl=True) as imbox:
all_inbox_messages = imbox.messages()
for uid, message in all_inbox_messages:
#print(message.sent_from)
if message.subject == '每日新闻一条' and message.sent_from[0]['email'] == '[email protected]':
#print(message.body['plain'])
yag = yagmail.SMTP(user = '[email protected]', host = 'smtp.163.com')
contents = message.body['plain']
yag.send('[email protected]','每日新闻一条',contents)
print('发送成功')
#代码运行此处是没有问题的
schedule.every().day.at('01:17').do(send_mail)
start = time.perf_counter()
while True:
schedule.run_pending()
end = time.perf_counter()
print('程序运行一次共用时:{:.2f}s'.format(end - start))
time.sleep(1)