Python操作邮件

在 Python 中,你可以使用 smtplib 发送电子邮件,并使用 email 模块来构建邮件内容。下面是一个完整的示例,展示如何使用 SMTP 服务器发送电子邮件。

发送 Email 的步骤

​ 1. 连接 SMTP 服务器(如 Gmail、Outlook、QQ 邮箱等)。

​ 2. 构建邮件内容(支持纯文本或 HTML)。

​ 3. 发送邮件。

代码示例:使用 Gmail SMTP 发送邮件

import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

# SMTP 服务器配置(以 Gmail 为例)
SMTP_SERVER = "smtp.gmail.com"
SMTP_PORT = 587  # TLS 端口,使用 465 代表 SSL
EMAIL_ACCOUNT = "your_email@gmail.com"  # 你的邮箱
EMAIL_PASSWORD = "your_app_password"  # 你的 SMTP 授权码(不是邮箱密码)

# 收件人信息
TO_EMAIL = "recipient@example.com"
SUBJECT = "测试邮件"
BODY = "你好,这是一封测试邮件,使用 Python 发送。"

def send_email():
    try:
        # 创建邮件对象
        msg = MIMEMultipart()
        msg["From"] = EMAIL_ACCOUNT
        msg["To"] = TO_EMAIL
        msg["Subject"] = SUBJECT

        # 添加邮件正文
        msg.attach(MIMEText(BODY, "plain"))

        # 连接 SMTP 服务器
        server = smtplib.SMTP(SMTP_SERVER, SMTP_PORT)
        server.starttls()  # 启用 TLS 加密
        server.login(EMAIL_ACCOUNT, EMAIL_PASSWORD)  # 登录 SMTP 服务器
        server.sendmail(EMAIL_ACCOUNT, TO_EMAIL, msg.as_string())  # 发送邮件
        server.quit()  # 关闭连接

        print("邮件发送成功!")
    except Exception as e:
        print(f"邮件发送失败: {e}")

# 发送邮件
send_email()

不同邮箱的 SMTP 配置

邮箱提供商 SMTP 服务器 端口(TLS) 端口(SSL)
Gmail smtp.gmail.com 587 465
Outlook/Hotmail smtp.office365.com 587 465
QQ 邮箱 smtp.qq.com 587 465
163 邮箱 smtp.163.com 25 465
Yahoo smtp.mail.yahoo.com 587 465

注意:

​ • Gmail 需要开启“允许低安全性应用访问”,或者使用应用专用密码(App Password)。

​ • QQ 邮箱和 163 邮箱 需要在设置里开启 SMTP服务 并获取授权码,作为 EMAIL_PASSWORD。

​ • 企业邮箱 可能需要不同的 SMTP 服务器地址,请查阅官方文档。

发送 HTML 邮件

如果想要发送 HTML 格式的邮件,可以修改 MIMEText 的类型:

html_body = """\
<html>
  <body>
    <h1>你好,</h1>
    <p>这是一封 <b>HTML</b> 格式的邮件。</p>
  </body>
</html>
"""
msg.attach(MIMEText(html_body, "html"))  # 改为 "html" 格式

发送带附件的邮件

如果需要发送带附件的邮件,可以使用 MIMEApplication:

from email.mime.base import MIMEBase
from email import encoders

# 添加附件
file_path = "example.pdf"
with open(file_path, "rb") as attachment:
    part = MIMEBase("application", "octet-stream")
    part.set_payload(attachment.read())

encoders.encode_base64(part)  # Base64 编码
part.add_header("Content-Disposition", f"attachment; filename={file_path}")
msg.attach(part)

总结

​ • 连接 SMTP 服务器并登录

​ • 构建邮件内容(支持文本、HTML、附件)

​ • 发送邮件并关闭连接

这样,你就可以用 Python 轻松发送邮件了 🚀

posted on 2025-01-30 09:46  朝朝暮Mu  阅读(135)  评论(0)    收藏  举报