Python发送邮件和短信
Python发送邮件和短信:教学讲解、应用场景与最佳实践
一、前言:自动化沟通是办公流程的重要一环
在自动生成 Word、PDF 或 Excel 报告之后,自动化发送这些内容给他人,是进一步提升效率的关键。而 邮件 和 短信 是最常见的通知渠道:
- 📧 邮件:适合发送结构化内容、大段说明、文件附件;
- 📱 短信:适合实时提醒、验证码、简短通知。
通过 Python,我们可以编写轻量脚本,帮助实现从生成 → 发送 → 通知的完整闭环。
二、使用 Python 发送电子邮件
1. 基础知识:SMTP 协议简要理解
- SMTP(Simple Mail Transfer Protocol)是电子邮件的发送协议;
- Python 提供了标准模块
smtplib
处理邮件发送; - 搭配
email.mime
模块构建带格式的邮件内容。
2. 安装准备与账号授权
📌 要发送邮件,需要一个能开启 SMTP 服务的邮箱账号(如:126、QQ、163、Gmail 等),并启用SMTP服务并获取授权码。
3. 示例:发送纯文本邮件
import smtplib
from email.mime.text import MIMEText
from email.header import Header
msg = MIMEText("你好,这是来自Python的邮件", "plain", "utf-8")
msg['From'] = "your_email@126.com"
msg['To'] = "receiver@example.com"
msg['Subject'] = Header("Python邮件测试", "utf-8")
smtp = smtplib.SMTP_SSL("smtp.126.com", 465)
smtp.login("your_email@126.com", "授权码")
smtp.sendmail("your_email@126.com", ["receiver@example.com"], msg.as_string())
smtp.quit()
4. 进阶:发送HTML内容 + 附件邮件
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
msg = MIMEMultipart()
msg['From'] = "your_email@126.com"
msg['To'] = "receiver@example.com"
msg['Subject'] = Header("请查收离职证明", "utf-8")
# 正文HTML内容
body = """<p>尊敬的用户,附件是您的证明材料,请查收。</p><hr><p>Python自动服务</p>"""
msg.attach(MIMEText(body, 'html', 'utf-8'))
# 添加附件
with open("文件路径.docx", "rb") as f:
att = MIMEApplication(f.read(), _subtype='octet-stream')
att.add_header('Content-Disposition', 'attachment', filename='离职证明.docx')
msg.attach(att)
smtp = smtplib.SMTP_SSL("smtp.126.com", 465)
smtp.login("your_email@126.com", "授权码")
smtp.sendmail("your_email@126.com", ["receiver@example.com"], msg.as_string())
smtp.quit()
5. 实用封装函数:通用邮件发送工具
def send_email(from_addr, to_addrs, subject, content, files=[]):
msg = MIMEMultipart()
msg['From'] = from_addr
msg['To'] = ';'.join(to_addrs)
msg['Subject'] = Header(subject, 'utf-8')
msg.attach(MIMEText(content, 'plain', 'utf-8'))
for file in files:
with open(file, 'rb') as f:
part = MIMEApplication(f.read())
part.add_header('Content-Disposition', 'attachment', filename=file.split('/')[-1])
msg.attach(part)
smtp = smtplib.SMTP_SSL("smtp.126.com", 465)
smtp.login(from_addr, "授权码")
smtp.sendmail(from_addr, to_addrs, msg.as_string())
smtp.quit()
6. 邮件发送典型应用场景
场景 | 内容类型 | 特点/建议 |
---|---|---|
求职邮件自动发送 | 附件 + 正文 | 使用 HTML 格式可读性更强 |
每日报表邮件(财务/业绩) | 附件 + 简要说明 | 搭配定时任务更高效 |
发票/证明材料推送 | 多附件或动态名称 | 建议使用 base64 编码 |
用户通知(批量) | HTML格式正文 | 可配合邮件模板系统 |
三、使用 Python 发送短信
1. 核心原理:调用第三方短信平台API
- Python 不能直接“发短信”,它通过HTTP接口向第三方服务商发送请求;
- 推荐平台如:螺丝帽、阿里云、腾讯云、云片网等;
- 一般需要注册账号 → 创建短信签名/模板 → 获取 API key。
2. 示例:调用螺丝帽平台发送短信
import requests
def send_sms_luosimao(phone, message):
url = "http://sms-api.luosimao.com/v1/send.json"
api_key = "key-你的API密钥"
response = requests.post(
url,
auth=("api", api_key),
data={"mobile": phone, "message": message},
timeout=10,
verify=False
)
return response.json()
3. 实用验证码生成函数
import random
def generate_code(length=6):
return ''.join(random.choices('0123456789', k=length))
4. 完整示例
def main():
code = generate_code()
msg = f"您的验证码是:{code},请勿泄露。【Python小课】"
result = send_sms_luosimao("13800138000", msg)
print(result)
if __name__ == "__main__":
main()
5. 短信发送使用建议与注意事项
项目/环节 | 建议说明 |
---|---|
API Key 管理 | 严格保密,可使用环境变量存储 |
签名设置 | 内容需包含【品牌/平台】标识符 |
模板审核 | 涉敏感词或营销内容需提前审核 |
发送限制 | 平台对频率/IP/号码都有管控 |
异常处理 | 建议加入异常捕获和重试逻辑 |
四、邮件 vs 短信:使用场景对比表
功能 | 邮件 | 短信 |
---|---|---|
使用平台 | 需要邮件服务(SMTP) | 需要第三方短信平台 |
适合内容 | 文档、报告、长文本、附件 | 短文本、验证码、即时通知 |
展示能力 | 支持 HTML、图片、排版 | 仅支持纯文本 |
成本 | 低(大多免费) | 按条收费(需购买套餐) |
送达时间 | 秒级\~分钟(依赖邮箱服务器) | 秒级,实时送达 |
常见应用 | 报表推送、通知信、营销邮件 | 注册验证码、订单提醒、营销短信 |
五、最佳实践总结
实践要点 | 邮件 | 短信 |
---|---|---|
✅ 使用HTML格式提升展示效果 | ✔ | ✘ |
✅ 封装函数模块化发送流程 | ✔ | ✔ |
✅ 加入异常处理及失败重试 | ✔(如网络、认证失败) | ✔(如 API 限流、内容非法) |
✅ 使用安全认证机制(授权码/API Key) | ✔ | ✔ |
✅ 使用模板系统统一内容 | ✔(正文模板 + 替换) | ✔(平台需配置模板) |
六、拓展任务与学习建议
实战练习
- 📧 编写脚本:每日将 PDF 报告发送至自己邮箱;
- 📱 编写函数:注册用户时,发送带验证码的短信;
- 🤖 封装模块:通用邮件/短信发送器,集成到自己的应用项目。
进阶方向
- 使用 SMTP 服务池 实现高并发邮件发送;
- 使用 Jinja2 模板引擎 生成动态邮件正文;
- 接入 阿里云短信 SDK 或 Twilio 实现国际短信发送;
- 实现邮件读取与自动回复(imaplib + poplib);
七、总结
自动发送邮件与短信,是让程序主动“沟通”的第一步。
通过本文的学习,你已经掌握:
- ✅ 使用
smtplib
构建邮件服务; - ✅ 使用
requests
调用第三方短信平台; - ✅ 在自动化报告、验证码、提醒通知中灵活应用。
📌 下一步建议:将发送功能集成进你正在开发的系统中,如“注册流程”、“定时推送服务”、“告警系统”。
如需我帮助你构建自动化邮件提醒系统、短信验证码模块,或基于平台如阿里云/Twilio 的接入开发,请继续提问\~