Python发送邮件和短信
基础教学 1 min read

Python发送邮件和短信

Blog Author

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 模板引擎 生成动态邮件正文;
  • 接入 阿里云短信 SDKTwilio 实现国际短信发送;
  • 实现邮件读取与自动回复(imaplib + poplib);

七、总结

自动发送邮件与短信,是让程序主动“沟通”的第一步。

通过本文的学习,你已经掌握:

  • ✅ 使用 smtplib 构建邮件服务;
  • ✅ 使用 requests 调用第三方短信平台;
  • ✅ 在自动化报告、验证码、提醒通知中灵活应用。

📌 下一步建议:将发送功能集成进你正在开发的系统中,如“注册流程”、“定时推送服务”、“告警系统”。

如需我帮助你构建自动化邮件提醒系统短信验证码模块,或基于平台如阿里云/Twilio 的接入开发,请继续提问\~