Python 自动化通信:发送邮件与短信
前两篇我们已经用 Daoman Python AI 实现了 Excel、Word、PDF 的一键自动生成——但做出来没人收可白搭!今天就打通业务最后一公里:聊聊 Python 怎么用 SMTP 协议无缝对接邮件,以及靠第三方 HTTP API 搞定合规短信通知,直接把「文档产出→消息触达」的闭环焊死~
1. 发送电子邮件:用 SMTP 直接「敲门」邮件服务器
发邮件不一定非要开浏览器登录,本质是我们的程序模拟邮件客户端,通过 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)直接和网易/QQ/企业邮箱的服务器对话。Python 内置的 smtplib 刚好封装了底层的握手、加密、发送逻辑。
1.1 前置安全准备:拿到「专属钥匙」
第三方程序直接用邮箱登录密码风险太高,现在主流邮箱(126/163/QQ/Gmail)都要求用授权码替代:
- 登录邮箱网页版
- 进入「设置→账户/POP3/IMAP/SMTP/Exchange」
- 开启 POP3/SMTP 服务
- 按提示绑定手机号、发送验证短信,拿到16位左右的专属授权码(记得复制保存,只显示一次!)
💡 小提示:企业邮箱的授权码/配置可能略有不同,但原理一致,查IT文档或找运维就行
1.2 第一封:纯文本邮件快速上手
邮件内容由 email.mime 系列模块「拼」出来,纯文本最简单,用 MIMEText;如果要附件/HTML/图片,就得用「容器」 MIMEMultipart。
1.3 升级版:带附件+HTML排版的邮件
纯文本太干了,我们可以加点HTML美化(比如加表格、加粗、公司logo占位),再把刚才AI生成的Excel/PDF/Word塞进去~
附件的核心逻辑
不管是.docx/.pdf还是.jpg/.xlsx,都是二进制文件,SMTP只能传文本,所以得用 Base64 把二进制转成字符。另外要特别注意中文文件名乱码问题,用 urllib.parse.quote 处理一下。
2. 发送短信:找第三方网关当「中间商」
和邮件有统一的SMTP协议不一样,短信没有通用的编程协议,总不能自己建个基站吧?所以我们需要找合规的第三方短信服务商(比如阿里云、腾讯云、螺丝帽)当「中间商」,用它们提供的 HTTP API 发送。
2.1 短信发送的标准合规流程
国家对短信管控很严,不带签名/未经许可发营销短信是违法的!所以必须严格走这几步:
- 注册服务商账号:选一个稳定的(推荐阿里云/腾讯云,大厂合规性好、有技术支持)
- 实名认证企业/个人
- 申请短信签名:比如
【道满科技】,放在短信开头或结尾(服务商有审核标准,不能太随意) - 申请短信模板:比如
您的验证码是${code},请于5分钟内输入。请勿泄露给他人!,变量用服务商指定的占位符 - 获取API Key/Secret Key/Access Key:相当于调用接口的「钥匙」
2.2 实战代码(以阿里云短信服务为例)
大厂的API更规范,支持一键生成SDK,但这里用通用的 requests 库演示,方便大家迁移到其他服务商~
3. 避坑指南与安全建议
-
🔐 绝对安全第一: 千万不要把授权码、API Key/Secret 直接写在代码里(尤其是传到GitHub/GitLab的公开仓库!),建议用
python-dotenv库读取环境变量,或者用云服务商的密钥管理服务(KMS)。 -
📧 邮件防垃圾信小技巧:
- 不要批量发送一模一样的邮件,加一点个性化内容(比如开头的名字)
- 尽量用企业邮箱发送(免费邮箱容易被标记)
- 附件大小控制在10MB以内(大文件可以用云盘链接代替)
-
📱 短信合规注意:
- 个人只能发验证码类、通知类短信,不能发营销短信
- 营销短信必须加「退订回T」
- 一定要配置IP白名单和调用频率限制,防止接口被盗刷
好了,今天的自动化通信教程就到这里!结合前两篇的自动生成文档,你已经可以用 Daoman Python AI 搭建一个完整的「周报/月报自动化系统」啦~

