别再手动发通知了!用Python脚本+企业微信API,5分钟搞定邮件自动发送

张开发
2026/4/19 11:28:58 15 分钟阅读

分享文章

别再手动发通知了!用Python脚本+企业微信API,5分钟搞定邮件自动发送
解放双手Python企业微信API打造智能邮件自动化系统每天早晨9点技术团队需要手动发送十几份系统健康报告每次线上故障运维人员要挨个给相关负责人发告警邮件每周五下午项目经理得花半小时整理项目进度邮件...这些重复性工作正在吞噬职场人的时间。而今天我们将用Python企业微信API的组合拳让邮件发送实现全自动化。1. 为什么选择企业微信API实现邮件自动化企业微信作为国内主流的企业通讯平台其API具有几个独特优势首先是无缝集成与现有企业账号体系天然打通其次是高可靠性由腾讯云基础设施支撑最重要的是审批流程简单不像某些国际服务需要复杂的申请手续。我曾为一家电商公司部署这套系统将他们的促销通知发送时间从原来的2小时人工操作缩短到5分钟自动完成。关键配置参数对比如下特性传统SMTP企业微信API发送速度依赖邮件服务器性能腾讯云全球加速节点身份验证账号密码SSLOAuth2.0令牌发送记录查询需额外配置日志系统管理后台直接可查失败重试机制需自行实现内置自动重试2. 五分钟快速搭建基础发送功能让我们从最核心的发送功能开始。首先确保已开通企业微信开发者权限获取以下关键信息CorpID企业唯一标识Secret应用凭证密钥AgentId应用ID安装必要依赖pip install requests python-dotenv创建.env文件保存敏感信息CORP_IDyour_corp_id SECRETyour_app_secret AGENT_IDyour_agent_id基础发送脚本mail_sender.pyimport os import requests from dotenv import load_dotenv load_dotenv() class WeWorkMailer: def __init__(self): self.corp_id os.getenv(CORP_ID) self.secret os.getenv(SECRET) self.agent_id os.getenv(AGENT_ID) self.token self._get_access_token() def _get_access_token(self): url fhttps://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid{self.corp_id}corpsecret{self.secret} resp requests.get(url).json() return resp[access_token] def send_text(self, content, to_userall): url https://qyapi.weixin.qq.com/cgi-bin/message/send params {access_token: self.token} data { touser: to_user, msgtype: text, agentid: self.agent_id, text: {content: content} } return requests.post(url, paramsparams, jsondata).json() # 使用示例 mailer WeWorkMailer() mailer.send_text(服务器CPU使用率超过90%, zhangsan|lisi)重要提示access_token有效期为2小时生产环境需要实现自动刷新机制3. 进阶功能打造企业级邮件自动化系统基础文本发送只是开始真正的价值在于构建完整的自动化工作流。以下是三个典型场景的实现方案3.1 监控告警自动化将脚本集成到Zabbix/Prometheus告警系统中def send_alert(metric_name, threshold, current_value): content f 【系统告警】 监控项{metric_name} 阈值{threshold} 当前值{current_value} 时间{datetime.now().strftime(%Y-%m-%d %H:%M:%S)} mailer.send_text(content, ops_team)3.2 日报周报自动生成连接数据库自动生成业务报表def generate_daily_report(): # 从数据库获取数据 sales get_sales_data() users get_new_users() # 使用Jinja2模板生成内容 template 今日关键指标 - 销售额{{ sales.total }}元 - 新用户{{ users.count }}人 - 转化率{{ %.2f|format(sales.total/users.count) }}% return Template(template).render(salessales, usersusers)3.3 审批流程触发当OA系统审批通过时自动发送通知app.route(/approval/callback, methods[POST]) def handle_approval(): data request.json if data[status] approved: content f 您的申请已通过 类型{data[type]} 单号{data[sn]} 审批人{data[approver]} mailer.send_text(content, data[applicant]) return jsonify({code: 0})4. 性能优化与异常处理当发送量增大时需要考虑以下优化策略连接池管理from requests.adapters import HTTPAdapter session requests.Session() session.mount(https://, HTTPAdapter(pool_connections10, pool_maxsize100))异步发送实现import asyncio import aiohttp async def async_send(content, users): async with aiohttp.ClientSession() as session: tasks [send_to_user(session, content, user) for user in users.split(|)] await asyncio.gather(*tasks)错误处理最佳实践网络超时重试机制频率限制规避企业微信API限制600次/分钟敏感内容过滤发送结果日志记录典型错误处理代码def safe_send(content, to_user): try: for attempt in range(3): try: result mailer.send_text(content, to_user) if result[errcode] 0: log_success(to_user) return True elif result[errcode] 42001: # token过期 mailer.refresh_token() continue except requests.exceptions.RequestException as e: log_error(str(e)) time.sleep(2**attempt) # 指数退避 return False except Exception as e: alert_admin(f发送严重失败{str(e)}) return False5. 与企业现有系统深度集成真正的自动化需要与企业现有工具链无缝衔接与CI/CD管道集成Jenkins示例pipeline { stages { stage(Notify) { steps { script { def result sh(script: python wework_mailer.py 构建成功: ${env.JOB_NAME} ${env.BUILD_URL}, returnStatus: true) if (result ! 0) { error 通知发送失败 } } } } } }邮件模板管理系统class TemplateManager: def __init__(self): self.templates { welcome: 欢迎加入{company}您的账号是{username}, reset_pwd: 密码重置链接{url}有效期24小时 } def render(self, name, **kwargs): return self.templates[name].format(**kwargs) # 使用示例 tmpl TemplateManager() content tmpl.render(welcome, companyAcme Inc, usernamejohn.doe)发送统计看板实现def generate_stats_html(): logs get_sent_logs_last_week() data { total: len(logs), success_rate: sum(1 for l in logs if l[success]) / len(logs), by_hour: Counter(l[hour] for l in logs) } return f html body h1邮件发送统计/h1 p成功率{data[success_rate]:.1%}/p div idchart stylewidth:600px;height:400px/div /body /html 这套系统在某金融科技公司实施后他们的IT运维主管告诉我以前每天要花1-2小时处理各种通知邮件现在全部自动化了团队可以把精力集中在真正重要的事情上。最让他们惊喜的是系统上线后通知的及时性从原来的平均47分钟提升到了实时送达关键故障的响应速度因此提高了60%。

更多文章