2.1 连接SMTP服务器
首先需通过SMTP协议连接邮箱服务器,不同邮箱的服务器地址和端口不同:- QQ邮箱:服务器 `smtp.qq.com`,端口 `465`SSL加密
- 163邮箱:服务器 `smtp.163.com`,端口 `465`
代码示例:
```python
import smtplib
from email.mime.multipart import MIMEMultipart # 构建多部分邮件
配置服务器信息
smtp_server = "smtp.qq.com"
smtp_port = 465
sender_email = "你的邮箱@qq.com"
sender_pwd = "你的授权码" # 替换为实际授权码
receiver_email = "收件人邮箱@example.com"
```
2.2 构建邮件内容:与附件
邮件需包含主题、和附件,通过`MIMEMultipart`对象整合: 1. 设置基本信息:主题Subject、发件人From、收件人To。 2. 添加:使用`MIMEText`定义文本内容,格式支持纯文本`'plain'`或HTML`'html'`。 3. 添加附件:通过`MIMEBase`读取本地文件,设置附件名称和编码格式。关键代码片段: ```python 创建邮件对象 msg = MIMEMultipart() msg["From"] = sender_email msg["To"] = receiver_email msg["Subject"] = "Python自动发送的带附件邮件" # 邮件主题
添加 body = "这是Python自动发送的测试邮件,附件为数据报表。" msg.attach(MIMEText(body, "plain", "utf-8")) 添加附件以Excel文件为例 attachment_path = "数据报表.xlsx" # 附件本地路径 with open(attachment_path, "rb") as f: part = MIMEBase("application", "octet-stream") part.set_payload(f.read()) # 编码处理避免乱码 encoders.encode_base64(part) # 设置附件名称 part.add_header("Content-Disposition", f"attachment; filename={attachment_path}") msg.attach(part) ```2.3 发送邮件:连接与执行
通过`smtplib.SMTP_SSL`建立加密连接,登录账户后发送邮件,最后关闭连接: ```python try: # 连接服务器并登录 server = smtplib.SMTP_SSL(smtp_server, smtp_port) server.login(sender_email, sender_pwd) # 发送邮件收件人可传入列表实现群发 server.sendmail(sender_email, receiver_email, msg.as_string()) print("邮件发送成功!") except Exception as e: print(f"发送失败:{e}") finally: server.quit() # 关闭连接 ``` 三、关键意事项- 附件路径:确保`attachment_path`为正确的本地绝对路径或相对路径,避免因文件不存在导致发送失败。
- 编码格式:附件名称需通过`add_header`显式设置,否则可能出现中文乱码。
- 异常处理:通过`try-except`捕获网络错误、授权失败等异常,提升程序稳定性。 通过以上步骤,即可用Python实现自动发送带附件的邮件。论是定时备份、报表分发还是通知提醒,这一技能都能显著提升工作效率,收藏备用。
