轻松实现邮件自动发送!掌握 SMTP 邮件发送技巧

在当今的信息化时代,邮件依然是工作中不可或缺的一部分。Python 的 smtplib 模块为我们提供了一个简单方便的途径来实现邮件的自动发送,今天我们就来聊一聊如何使用 Python 发送邮件,具体包括文本邮件、HTML 邮件、带附件邮件等。

1. SMTP 协议概述

SMTP(Simple Mail Transfer Protocol)是一个简单的邮件传输协议,它负责在源地址和目的地址之间传送邮件。通过 smtplib,我们可以轻松地在 Python 中实现邮件发送的功能。

2. 基本设置与邮件发送

首先,我们需要导入 smtplib 并创建一个 SMTP 对象。以下是一个简单的 Python 发送邮件实例:

# 导入发送邮件所需的模块
import smtplib  # 用于连接 SMTP 服务器和发送邮件
from email.mime.text import MIMEText  # 用于创建邮件内容(文本格式)
from email.header import Header  # 用于设置邮件头(发件人、收件人、主题等)

# 定义发件人和收件人邮箱
sender = 'your_email@example.com'  # 这里填写你的发件人邮箱
receivers = ['receiver_email@example.com']  # 这里填写收件人邮箱,可以是一个或多个

# 创建邮件内容,MIMEText 用于表示邮件的正文部分
# 参数:'这是测试邮件内容' 是邮件正文,'plain' 表示纯文本格式,'utf-8' 是字符编码
message = MIMEText('这是测试邮件内容', 'plain', 'utf-8')

# 设置邮件头信息
message['From'] = Header("Python 博主", 'utf-8')  # 设置发件人的显示名称
message['To'] = Header("收件人", 'utf-8')  # 设置收件人的显示名称
message['Subject'] = Header('Python SMTP 邮件测试', 'utf-8')  # 设置邮件的主题

# 连接到 SMTP 服务器并发送邮件
try:
    # 连接到 SMTP 服务器
    # smtp.example.com 是一个占位符,实际应用时需要填写邮件提供商的 SMTP 服务器地址
    smtp_obj = smtplib.SMTP('smtp.example.com')  
    
    # 使用 sendmail 方法发送邮件
    # 参数:发件人邮箱、收件人邮箱、邮件内容(message.as_string() 会将邮件对象转换为字符串格式)
    smtp_obj.sendmail(sender, receivers, message.as_string())
    
    # 如果邮件发送成功,打印邮件发送成功的提示
    print("邮件发送成功")
except smtplib.SMTPException:
    # 如果在发送邮件过程中发生异常,捕获异常并打印错误信息
    print("邮件发送失败")

在这个实例中,我们通过 MIMEText 来创建邮件内容,并设置了发件人、收件人和邮件主题。然后,如果你本机安装sendmail,使用 sendmail() 方法将邮件发送出去。

3. 使用第三方 SMTP 服务

如果你没有本地的 SMTP 服务,也可以使用第三方服务如 QQ 邮箱、Gmail 等。以下是如何使用 QQ 邮箱 SMTP 服务发送邮件的示例:

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

# 发件人邮箱和授权码
my_sender = 'your_email@qq.com'  # 替换成你的 QQ 邮箱地址
my_pass = 'your_auth_code'       # 替换成你的 QQ 邮箱授权码(不是密码)
my_user = 'receiver_email@example.com'  # 替换成收件人的邮箱地址

def send_email():
    try:
        # 创建邮件内容
        msg = MIMEText('这是邮件内容', 'plain', 'utf-8')
        msg['From'] = formataddr(["Sender", my_sender])  # 发件人
        msg['To'] = formataddr(["Receiver", my_user])    # 收件人
        msg['Subject'] = "Python 邮件发送测试"  # 邮件标题

        # 连接 SMTP 服务器并发送邮件
        server = smtplib.SMTP_SSL("smtp.qq.com", 465)
        server.login(my_sender, my_pass)  # 登录邮箱
        server.sendmail(my_sender, [my_user], msg.as_string())  # 发送邮件
        server.quit()  # 退出 SMTP 服务器
        print("邮件发送成功")
    except Exception as e:
        print("邮件发送失败:", e)

# 调用发送邮件的函数
send_email()

在这个例子中,我们通过 formataddr() 来设置发件人和收件人信息,并使用 SMTP_SSL 连接到 QQ 邮箱的 SMTP 服务器(smtp.qq.com)进行邮件发送。

mypass中不是密码,请在邮箱中需要将SMTP服务打开,填写授权码!!!

如果出现 smtplib.SMTPAuthenticationError,可能是你的授权码有误,或者需要确保已经启用 SMTP 服务

如果网络问题导致无法连接服务器,可以检查你的防火墙设置或网络环境。

已发送成功!!!

发送成功后,查看我们的收件箱(如果没有请查看垃圾箱),就可以查看到邮件信息。

注意内容:

(如有需求请根据具体情况更改,可以百度具体服务地址与端口号!!!)

如果需要同时发送给多人,请参考

import smtplib
from email.mime.text import MIMEText
from email.utils import formataddr

my_sender = 'your_email@qq.com'
my_pass = 'your_auth_code'  # QQ 邮箱授权码
my_user = ['receiver1@example.com', 'receiver2@example.com', 'receiver3@example.com']

def send_email():
    try:
        msg = MIMEText('这是邮件内容', 'plain', 'utf-8')
        msg['From'] = formataddr(["Sender", my_sender])
        msg['To'] = ", ".join(my_user)  # 将多个收件人用逗号连接
        msg['Subject'] = "Python 邮件发送测试"

        server = smtplib.SMTP_SSL("smtp.qq.com", 465)
        server.login(my_sender, my_pass)
        server.sendmail(my_sender, my_user, msg.as_string())
        server.quit()
        print("邮件发送成功")
    except Exception as e:
        print("邮件发送失败:", e)

send_email()

4. 发送 HTML 格式邮件

HTML 格式邮件使邮件内容更为丰富,支持文本、图片和链接等。我们只需要在 MIMEText 中将邮件内容的类型设置为 html 即可。如果你本机安装sendmail,以下是发送 HTML 邮件的代码示例:

import smtplib
from email.mime.text import MIMEText
from email.header import Header

sender = 'your_email@example.com'
receivers = ['receiver_email@example.com']

html_content = """
<p>欢迎使用 Python 邮件发送功能!</p>
<p><a href="http://www.runoob.com">点击这里查看教程</a></p>
"""

message = MIMEText(html_content, 'html', 'utf-8')
message['From'] = Header("Python 博主", 'utf-8')
message['To'] = Header("收件人", 'utf-8')
message['Subject'] = Header('Python HTML 邮件测试', 'utf-8')

try:
    smtp_obj = smtplib.SMTP('smtp.example.com')
    smtp_obj.sendmail(sender, receivers, message.as_string())
    print("HTML 邮件发送成功")
except smtplib.SMTPException:
    print("HTML 邮件发送失败")

在上面的代码中,我们将 message 的类型设置为 html,并且邮件正文包含了一个链接。

5. 发送带附件的邮件

除了普通文本和 HTML 邮件外,有时候我们还需要发送带附件的邮件。我们可以使用 MIMEMultipart 来创建一个包含多个部分的邮件,附件部分可以通过 MIMEText 来处理。如果你本机安装sendmail,以下是带附件的邮件发送实例:

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

sender = 'your_email@example.com'
receivers = ['receiver_email@example.com']

message = MIMEMultipart()
message['From'] = Header("Python 博主", 'utf-8')
message['To'] = Header("收件人", 'utf-8')
message['Subject'] = Header('Python 带附件邮件测试', 'utf-8')

# 邮件正文内容
message.attach(MIMEText('这是带附件的邮件内容...', 'plain', 'utf-8'))

# 添加附件
attachment = MIMEText(open('example.txt', 'rb').read(), 'base64', 'utf-8')
attachment["Content-Type"] = 'application/octet-stream'
attachment["Content-Disposition"] = 'attachment; filename="example.txt"'
message.attach(attachment)

try:
    smtp_obj = smtplib.SMTP('smtp.example.com')
    smtp_obj.sendmail(sender, receivers, message.as_string())
    print("带附件邮件发送成功")
except smtplib.SMTPException:
    print("带附件邮件发送失败")

在这个实例中,我们通过 MIMEMultipart 创建邮件,使用 attach() 方法将正文和附件加入邮件中。

6. 总结

通过 Python 的 smtplib 模块,我们能够轻松实现各种形式的邮件发送。无论是普通文本邮件、HTML 邮件、带附件邮件,还是通过第三方 SMTP 服务,都可以通过简单的代码实现自动化。

在实际应用中,发送邮件功能非常适合用在自动化报告、通知、提醒等场景中。通过掌握这些技巧,我们可以使 Python 更好地服务于我们的工作与生活。

希望这篇教程能对你有所帮助!如果你有任何问题或想要进一步了解 Python 的其他功能,欢迎在评论区留言。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值