Python读取邮件(Exchange或者Outlook邮箱服务器)

背景

公司需求:读取收件箱,提取关键字;本来以为会是正常的163邮箱,或者qq邮箱,结果被告知是 exchange。

过程

本着传统程序员的三部曲:倒杯水,点根烟,打开百度。网上找了点案例,代码我就不贴了,最原始的code应该是这位老哥的了:

https://www.cnblogs.com/chendongblog/p/12500812.html

(吐槽一句:各位大大,能不能别单纯的粘贴、复制,然后发帖。。。没有样式,阅读费力就算了;没有任何介绍说明,自行调试时真的比较头疼)
在这里插入图片描述

言归正传

我的差异化体现在:
1、要求以第一封邮件为准,而按上面老哥的案例,是倒序排列的,代码体现在:

for item in inbox.all().order_by("-datetime_sent"):

遂修改为:

for item in inbox.all().order_by("datetime_sent"):

实现了正序排列;


2、发现了同名,我丢!
还好,系统内是记录了用户邮箱的,然后再get_email_list方法里修改取值

sender_name = item.sender.email_address

大致的代码段贴在这儿了:
(其实item里,存在3个属性值,可以通过print(item)查看具体)

        for item in inbox.all().order_by("datetime_sent"):
            subject = item.subject
            if not item.sender:
                continue

            # sender_name = item.sender.name
            # -----这里修改为使用邮箱地址------
            sender_name = item.sender.email_address
            send_time = (item.datetime_sent + datetime.timedelta(hours=8)).strftime(
                "%Y-%m-%d %H:%M:%S"
            )
            b1 = (
                True
                if not subject_like or subject_like.lower() in subject.lower()
                else False
            )
            b2 = True if not sender or sender.lower() in sender_name.lower() else False

            if b1 and b2:
                email_list.append([subject, sender_name, send_time])

还有别忘了download_email方法里,把入参sender修改为匹配email_address

        for item in inbox.all().order_by("-datetime_sent"):
            # if sender.lower() in item.sender.name.lower():
            if sender.lower() in item.sender.email_address.lower():
                _dict["content"] = item.text_body
                _dict["attachments"] = [
                    {"name": attachment.name, "content": attachment.content}
                    for attachment in item.attachments
                    if isinstance(attachment, FileAttachment)
                ]
                # print(_dict["content"])
                if _dict:
                    log.info('one mail meets conditions')
                return _dict
            return

在这里插入图片描述

写在最后:案例上的都是没有加异常捕捉的,建议各位大佬在调用时加上异常捕获,方便调试时定位

后续

一个Java项目,需要生成邮件发送,邮件采用html格式。
利用的技术栈:hutool,工具方法:EmailUtils.sendEdrEmail。

以下简单记录遇到的2个问题点:

1、outlook邮箱,html的css格式,只能写在行内style标签,定义在外面的无法引入,head里的style好像也无效;
2、邮件正文需要插入图片的,通过<img  src="cid:pictureId" />和EmailUtils.sendEdrEmail方法的参数imageMap即可实现,imageMap的key是img标签cid对应的pictureId,value为图片的InputStream
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值