解锁自动化办公新技能:Python实战应用-自动转发邮件到企业微信

📧 【高效联络,信息不落空】 📧

在这个信息爆炸的时代,作为企业的一员,我们如何从繁杂的邮件中迅速筛选出客户的心声、展会的新动向,同时又不遗漏每一份重要的咨询呢?秘诀就在我们的新策略里!

✨ 【自动收取,省时省力】

首先,我们要告别定时查收邮件的烦恼。新系统将自动收取邮件,确保你不错过任何一封重要邮件。

🚀 【智能分类,去芜存菁】

然后,邮件将经过智能筛选,自动分为“重要邮件”和“垃圾邮件”。初期,我们采用简单关键词过滤,未来将引入更高级的机器学习算法。

📢 【信息直达,快速响应】

重要邮件?直接转发到企业微信群!这样,团队成员可以迅速响应,提供所需帮助。

🔔 【及时通知,使命必达】

每当重要邮件到达,系统将及时通知相关同事,确保信息得到快速处理。对于邮件收取和信息转发,我们已经轻车熟路。还不熟悉的请看往期文章:

如何一键群发企业微信,钉钉消息。

但为了让新鲜邮件持续涌入,我们需要微调系统。每次收取邮件时,我们会记录时间戳,只获取最新的邮件。至于通知机制,那就更简单了:邮件一到,直接推送到相应的群组,有需要时,还可以通过@功能提醒具体同事。

不过,邮件分类可是个技术活。首个版本中,我们将使用简单关键词过滤,未来再引入更智能的机器学习技术。以下是整个程序工作的流程图。
在这里插入图片描述

代码编写

想象一下,如果你的系统能够记住查看最后一封邮件的时间,那每次收取邮件时,它只需要查找那个时间点之后的新邮件。这就好比有个超级智能的秘书,总是在记录和更新你的工作进度。酷吧?

保存这些时间数据有多种方法,你可以选择文本文件、数据库,甚至是电子表格。但在这个例子中,我们选择了一种更为轻便快捷的方式——使用pkl文件。

🖥 【Python小助手:pkl文件的妙用】

pkl文件是Python的一种序列化数据保存格式。这意味着你代码里的列表、字典等数据结构,都可以直接被保存和读取。就像是把你的数据打包,需要的时候再解开,超级方便!


import pickle
from datetime import datetime, timedelta

try:
    # 从pkl文件中读取数据
    with open('last_email.pkl', 'rb') as file:
        last_email = pickle.load(file)
except:
    # 如果文件不存在,则初始化为当前时间前1天
    rece_time = datetime.today() - timedelta(days=1),
    last_email = {
        'email_from': 'example1@163.com',
        'receive_time': rece_time.strftime('%Y-%m-%d %H:%M:%S'),
        'email_subject': 'None'
    }

# 保存pkl文件
with open('data.pkl', 'wb') as file:
    pickle.dump(last_email, file)

对邮件的接收时间字符串处理为datetime类型,时间转换函数parse_mail_time()的代码。

def parse_mail_time(mail_datetime):
    # 定义邮件时间解析函数
    # 定义GMT时间格式
    GMT_FORMAT = "%a, %d %b %Y %H:%M:%S"
    # 查找'+0'的位置
    index = mail_datetime.find(' +0')
    # 如果存在时区信息,则去掉时区信息,若公司有不同时区的邮件,需要优化代码
    if index > 0:
        mail_datetime = mail_datetime[:index]
    try:
        # 将字符串解析为datetime对象
        mail_datetime = datetime.strptime(mail_datetime, GMT_FORMAT)
        return mail_datetime
    except:
        # 如果解析出错,则打印错误信息并返回None
        print("邮件时间格式解析错误:" + mail_datetime)
        return None

现在来编写邮件内容处理函数parse_email_server,倒序遍历邮件,若邮件的接收时间小于上一次邮件的时间,则结束循环。如不是则为新邮件,进入send_content_to_wx(msg)函数,提取邮件信息并按主题发送到不同的企业微信群,代码如下。

def parse_email_server(email_server, last_email):
    def get_email_content(email_server, index):
        # 倒序遍历邮件,这样取到的第一封就是最新邮件
        resp, lines, octets = email_server.retr(index)
        # lines存储了邮件的原始文本的每一行,
        # 邮件的原始文本:# lines是邮件内容,列表形式使用join拼成一个byte变量
        msg_content = b'\r\n'.join(lines).decode('utf-8')
        # 解析邮件:
        return Parser().parsestr(msg_content)
    
    resp, mails, octets = email_server.list()
    num, total_size = email_server.stat()
    print("邮件数量为:" + str(num))
    # mails存储了邮件编号列表,
    index = len(mails)
    # 上一次邮件接收时间
    last_receive_time = datetime.strptime(
        last_email.get('receive_time'),
        "%Y-%m-%d %H:%M:%S")
    # 倒序遍历邮件
    for i in range(index, 0, -1):
        msg = get_email_content(email_server, i)
        # 邮件时间,解析时间格式
        mail_datetime = parse_mail_time(msg.get("date"))
        if mail_datetime:
            if mail_datetime <= last_receive_time:
                # 旧邮件不处理,后面的邮件都是旧邮件,可以跳出循环
                break
            # 解析邮件具体内容,并发送到企业微信
            send_content_to_wx(msg)
            if i == index:
                # 更新最新一封邮件
                msg = get_email_content(email_server, index)
                from_addr = parseaddr(msg.get('From'))[1]
                subject = decode_header(msg.get('Subject'))
                subject = subject[0][0].decode(subject[0][1]) if subject[0][1] else subject[0][0]
                mail_datetime = parse_mail_time(msg.get("date"))
                last_email = {
                    'email_from': from_addr,
                    'receive_time': mail_datetime.strftime("%Y-%m-%d %H:%M:%S"),
                    'email_subject': subject
                }
                # 保存到文件里面
                with open('last_email.pkl', 'wb') as file:
                    pickle.dump(last_email, file)
    # 别忘记退出
    email_server.quit()
 
def send_content_to_wx(msg):
    from_addr = parseaddr(msg.get('From'))[1]
    to_addr = parseaddr(msg.get('To'))[1]
    subject = decode_header(msg.get('Subject'))
    subject = subject[0][0].decode(subject[0][1]) if subject[0][1] else subject[0][0]
    # 获取邮件的正文
    for part in msg.walk():
        if part.get_content_type() == 'text/plain' or part.get_content_type() == 'text/html':
            body = part.get_payload(decode=True).decode(part.get_content_charset() or 'utf-8')
    email_content = f"""
    发送方:{from_addr}
    接收方:{to_addr}
    主题:{subject}
    正文:{body}
    """
    # 邮件主题关键词分类
    TARGET = [
        ("展会", "展览", "广交会"),
        ("咨询", "销售", "商品"),
        ("简历", "招聘", "求职")
    ]
    # 判断邮件类型,发送到对应群
    # 是否为市场部
    for key in TARGET[0]:
        if key in subject:
            send_msg_to_weixin(email_content,url=MARKET_ROBOT_URL)
            # 发送后可以返回
            return
    # 是否为销售部
    for key in TARGET[1]:
        if key in subject:
            send_msg_to_weixin(email_content, url=SALE_ROBOT_URL)
            return
    # 是否为人事部
    for key in TARGET[2]:
        if key in subject:
            send_msg_to_weixin(email_content, url=HR_ROBOT_URL)
            return
    # 如果都不是,默认发到行政部
    send_msg_to_weixin(email_content)

程序运行后,效果下图所示,左边是企业微信群的消息,右边是邮箱收到的消息。
在这里插入图片描述

定时任务

🕓 【Windows定时任务:让电脑自动工作】

想不想让你的电脑在特定时间自动做一些事情?比如,运行你的Python脚本?在Windows上,你可以通过“任务计划程序”来实现这个魔法。

1️⃣ 【开启任务计划程序】

在开始菜单里搜一搜“任务计划程序”,然后打开它。
点击“创建基本任务…”,给你的任务起个名字,再描述一下它是干什么的。

2️⃣ 【设置触发器】

决定什么时候开始这个任务:是电脑启动时,还是按照你的时间表?
设置好触发器,让电脑知道何时行动。
3️⃣ 【指定操作】

选择“启动程序”。
告诉电脑Python解释器在哪里,还有你的脚本在哪里。
把这些路径作为参数填进去。
4️⃣ 【额外设置】

如果需要,你可以设置一些条件,比如只有电脑空闲时才运行任务。
还可以设置任务结束的方式,比如任务可以运行一次就结束,或者重复进行。
5️⃣ 【完成创建】

检查一下任务摘要,确认一切设置正确。
点击“完成”,你的定时任务就设置好了!
6️⃣ 【管理任务】

如果你想立即运行任务,或者以后需要修改任务,可以在任务列表中找到它,进行相应的操作。
📅 【Linux定时任务:让终端自动执行】

在Linux上,设置定时任务就更简单了。只需要打开终端,输入下面的命令:

crontab -e

然后,在你的crontab文件里添加一个新的定时任务。每行代表一个任务,格式如下:

*/10 * * * * /usr/bin/python3 /path/to/your/script.py

这行的意思是,每10分钟执行一次你的脚本。每个星号代表一个时间单位:分钟、小时、日期、月份、星期几。设置好后,保存并退出,你的任务就会按计划执行了。

获取完整代码,可以关注我的公众号,发送“自动转发邮件”
在这里插入图片描述

  • 12
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python微信企业邮箱发送邮件需要使用第三方库,常用的有smtplib、email、os等库。 首先需要导入所需的库,并定义发件人、收件人、邮件主题和内容等信息。使用email库创建一个MIMEText对象,将邮件内容存储在该对象的msg属性中。接着使用smtplib库创建SMTP对象,连接到企业邮箱服务器,使用用户名和密码登录。最后调用SMTP对象的sendmail方法,将邮件发送给收件人。 可能会遇到企业邮箱发件人地址需要通过审核的问题,需要在企业邮箱后台进行设置。 下面是一个简单的python微信企业邮箱发送邮件的示例代码: ```python import smtplib from email.mime.text import MIMEText import os # 发件人、收件人、邮件主题、邮件内容等信息 sender = 'xxx@yourcompany.com' receiver = 'xxx@othercompany.com' subject = 'Python发送企业邮件' content = '这是一封测试邮件,仅供参考。' # 创建MIMEText对象,邮件内容存储在该对象的msg属性中 msg = MIMEText(content) msg['Subject'] = subject msg['From'] = sender msg['To'] = receiver # 定义企业邮箱服务器和用户名、密码 smtp_server = 'smtp.exmail.qq.com' user_name = 'your_username' password = 'your_password' # 使用SMTP对象连接到企业邮箱服务器,并进行登录验证 smtp_obj = smtplib.SMTP(smtp_server, 587) smtp_obj.ehlo() smtp_obj.starttls() smtp_obj.login(user_name, password) # 发送邮件 smtp_obj.sendmail(sender, receiver, msg.as_string()) # 关闭连接 smtp_obj.quit() ``` 需要注意的是,在实际使用时,需要将代码中的发件人、收件人、企业邮箱服务器、用户名和密码等信息替换为自己的实际信息。同时,还需要考虑邮件附件、邮件格式等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值