当前位置:首页 > 未命名 > 正文内容

Python SMTP发送邮件的10段常用代码

大大3小时前未命名4
烽火邮箱企业邮箱蜂邮EDM邮件营销系统

【蜂邮EDM】:邮件群发系统,EDM邮件营销平台,邮件代发服务。 查看价格
【AokSend邮件API】:触发式邮件API,15元/万封,99%送达率。 查看价格
【烽火邮箱】:新人领取免费域名邮箱,可用作企业邮箱公司邮箱。 查看价格

Python SMTP 发送邮件的 10 段常用代码

随着互联网的快速发展,发送邮件已经成为企业日常运营中不可或缺的一部分。而在发送邮件的过程中,如何高效地实现邮件发送,尤其是通过 Python 编程来实现,已经成为很多开发者关注的重点。其中,使用 SMTP(Simple Mail Transfer Protocol)协议是一种非常常见的邮件发送方式,因为它支持跨域的邮件传输,适合用于企业级的邮件系统。

在本篇文章中,我们将深入探讨如何利用 Python 的 SMTP 操作,编写 10 段常用的代码示例,并通过详细的解释和注释,帮助读者更好地理解和掌握这些代码的应用场景和优化方法。


1. 导入必要的库

在 Python 中使用 SMTP 发送邮件,首先需要导入相关的库。最常用的是 smtplib 库,它提供了一个 Python 接口来与 SMTP 服务器通信。此外,我们还可以使用 email 库来处理邮件内容的编码和格式化。

from smtplib import *import email

关键词: smtplib 库,email 库,SMTP 协议


2. 创建一个基本的 SMTP 发送邮件函数

为了简化邮件发送的过程,我们可以编写一个函数,接受发送方信息、收件人地址、邮件正文等参数,并在函数内部完成邮件发送的全部操作。

def send_email(sender, recipients, subject, message):    # 连接到 SMTP 服务器    server = 'smtp.example.com'  # 根据实际服务器地址进行调整    port = 587  # SMTP 服务器的端口    # 建立一个 SMTP 对象    serverobj =.SMTP(server, port)    # 连接方式:从客户端出发(即从计算机出发,通过 SMTP 服务器发送邮件)    serverobj.ehlo()    serverobj.starttls()  # 启用 SSL/TLS 加密传输    # 登录到 SMTP 服务器    serverobj.login(sender, 'your_password')  # 替换为实际的密码    # 发送邮件    serverobj.sendmail(sender, recipients, subject, message)    # 关闭 SMTP 对象    serverobj.quit()

关键词: SMTP 协议,smtplib 库,sendmail 方法,starttls 方法

解释:

  • serverport 是 SMTP 服务器的地址和端口,需要根据实际情况进行调整。
  • starttls 方法用于启用 SSL/TLS 加密传输,确保邮件传输的安全性。
  • sendmail 方法用于发送邮件,其参数包括发送方地址、收件人地址、主题和正文。

3. 测试代码 - 基本邮件发送

接下来,我们测试一下上面编写的基本邮件发送函数。假设我们有以下收件人信息:

recipients = ['user1@example.com', 'user2@example.com']subject = '测试邮件:这是测试邮件吗?'message = '这是您的测试邮件正文。'sender = 'test@example.com'

调用 send_email 函数:

Python SMTP发送邮件的10段常用代码

send_email(sender, recipients, subject, message)

关键词: 测试邮件邮件正文收件人列表

解释:

  • 这部分代码主要用于测试邮件发送功能,确保 SMTP 服务器连接正常,并且邮件能够正确发送。
  • 在实际应用中,建议在发送前添加邮件发送日志,以确保邮件确实被发送。

4. 添加邮件发送的优化措施

在邮件发送过程中,优化措施是非常重要的。以下是一些常见的优化方法:

4.1 设置邮件发送的超时时间

有时候,由于网络问题或 SMTP 服务器的繁忙,邮件发送可能会超时。我们可以设置邮件发送的超时时间,以避免邮件被标记为未发送。

🔔🔔🔔

【烽火邮箱】:烽火邮箱是一款简洁高效的企业邮箱平台,新客户赠送免费企业邮箱,一个起卖、按月付费(低至9.9元);支持别名邮箱及群组邮箱,支持定制无限邮箱。高权重纯净IP池,系统自带反垃圾机制。
立即查看 >> :企业邮箱价格


【蜂邮EDM】:邮件群发系统,EDM邮件营销平台,邮件代发服务,专业研发定制邮件营销系统及邮件群发解决方案!蜂邮自研产品线主要分为标准版、外贸版、企业版、定制版,及邮件API邮件SMTP接口服务。
立即查看 >> :邮件发送价格


【AokSend邮件API】:专注触发式邮件API发送服务。15元/万封,发送验证码邮件、忘记密码邮件、通知告警邮件等,不限速。综合送达率99%、进箱率98%。触发邮件也叫事务性邮件或推送邮件,包含:验证码邮件、重置密码邮件、余额提醒邮件、会员到期邮件、账号认证邮件等!
立即查看 >> :邮件发送价格

🔔🔔🔔

import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextimport timedef send_email_with_timeout(sender, recipients, subject, message):    timeout = 60  # 60 秒的超时时间    try:        server = smtplib.SMTP('smtp.example.com', 587)        server.starttls()        server.login(sender, 'your_password')        server.sendmail(sender, recipients, subject, message)        server.quit()    except smtplib.SMTPException as e:        if time_since_last Send < timeout:            send_email_with_timeout(sender, recipients, subject, message)        else:            print(f"邮件发送失败,已等待{timeout}秒。")            return    except Exception as e:        print(f"邮件发送失败,错误信息:{str(e)}")

关键词: 超时时间smtplib 库,SMTP 协议

解释:

  • timeout 设置为 60 秒,表示如果邮件发送超时,函数会自动重试。
  • 通过 time_since_last Send 来判断是否需要再次发送邮件。

5. 添加邮件发送的安全措施

在发送邮件时,安全性是非常重要的。以下是一些常见的安全措施:

5.1 邮件内容加密

为了防止邮件内容被截获或篡改,我们可以将邮件内容加密。

def send_encrypted_email(sender, recipients, subject, message):    # 配置加密参数    encryption_key = 'your_encryption_key'    decryption_key = 'your_decryption_key'    # 加密邮件正文    encrypted_message = encrypt(message, encryption_key)    # 调用 send_email 函数    send_email(sender, recipients, subject, encrypted_message)

关键词: 邮件内容加密加密参数encrypt 函数

解释:

  • 需要在实际应用中实现 encrypt 函数,用于对邮件正文进行加密。
  • 解密时,使用 decryption_key 来解密邮件正文。

6. 批量发送邮件

在实际应用中,往往会需要批量发送邮件。以下是一个简单的批量邮件发送函数。

def send_batch_emails(sender, recipients_list, subject, message template):    import smtplib    import email    # 配置 SMTP 服务器信息    server = 'smtp.example.com'    port = 587    # 连接到 SMTP 服务器    serverobj = smtplib.SMTP(server, port)    serverobj.starttls()    serverobj.login(sender, 'your_password')    for recipient in recipients_list:        # 替换模板中的占位符        message = message template.replace('RECEPIENT_NAME', recipient)        # 发送邮件        serverobj.sendmail(sender, recipient, subject, message)    serverobj.quit()

关键词: 批量发送邮件模板smtplib

解释:

  • recipients_list 是一个包含所有收件人地址的列表。
  • message template 是一个包含占位符的邮件正文,用于将不同的收件人地址替换进去。

7. 邮件合并 - 将多封邮件合并为一封

在某些情况下,需要将多封邮件合并为一封,例如将邮件正文、附件等合并到同一封邮件中。以下是一个简单的示例:

def send_merged_email(sender, recipients, subject, main_message, additional_attachments=None):    import smtplib    from email.mime.multipart import MIMEMultipart    from email.mime.text import MIMEText    from email.mime.base import MIMEBase    # 创建一个合并邮件    msg = MIMEMultipart()    msg['From'] = sender    msg['To'] = ', '.join(recipients)    msg['Subject'] = subject    # 添加正文    main_part = MIMEText(main_message, 'plain')    msg.attach(main_part)    # 添加附件(如果有)    if additional_attachments is not None:        for attachment in additional_attachments:            with open(attachment, 'rb') as f:                part = MIMEBase('application/x-binary', 'octet-stream')                part.set_header('Content-Disposition', 'attachment', filename=attachment)                part.add_header('Content-Disposition', 'inline', filename=attachment)                part.set_payload(f.read())                msg.attach(part)    # 连接到 SMTP 服务器    server = smtplib.SMTP('smtp.example.com', 587)    server.starttls()    server.login(sender, 'your_password')    # 发送邮件    server.sendmail(sender, recipients, subject, msg.as_string())    # 关闭 SMTP 对象    server.quit()

关键词: 邮件合并MIMEMultipartMIMETextMIMEBaseas_string() 方法

解释:

  • 使用 MIMEMultipart 来创建合并邮件。
  • 使用 MIMEText 来添加正文,使用 MIMEBase 来添加附件。
  • as_string() 方法用于将合并邮件的二进制表示转换为字符串,以便发送。

8. 批量处理旧邮件

在某些情况下,需要批量处理旧邮件,例如删除已发送的邮件或标记已发送的邮件。以下是一个简单的示例:

def batch_process_old_emails():    import smtplib    import email    import os    import time    # 配置 SMTP 服务器信息    server = 'smtp.example.com'    port = 587    # 连接到 SMTP 服务器    serverobj = smtplib.SMTP(server, port)    serverobj.starttls()    serverobj.login('test@example.com', 'your_password')    # 获取已发送邮件列表    with open('sent_emails.txt', 'r') as f:        sent_emails = f.read().splitlines()    # 遍历所有邮件    for email_address in sent_emails:        try:            serverobj.sendmail('test@example.com', email_address, '邮件状态更新', '邮件已发送!')            print(f"已发送邮件:{email_address}")        except smtplib.SMTPException as e:            print(f"无法发送邮件:{email_address}, 错误信息:{str(e)}")    # 重置邮件发送计数器    with open('sent_emails.txt', 'w') as f:        f.write('')    serverobj.quit()

关键词: 批量处理旧邮件sent_emails.txtsmtplib

解释:

  • 使用 sent_emails.txt 文件记录已发送的邮件地址。
  • 在循环中,尝试发送测试邮件,确保邮件发送计数器正常工作。

9. 自动化定时发送邮件

为了提高邮件发送效率,可以编写一个脚本来实现定时发送邮件。以下是一个简单的示例:

import smtplibfrom email.mime.multipart import MIMEMultipartfrom email.mime.text import MIMETextimport timedef automated_email_sender(sender, recipients, subject, message):    # 配置 SMTP 服务器信息    server = 'smtp.example.com'    port = 587    # 创建一个合并邮件    msg = MIMEMultipart()    msg['From'] = sender    msg['To'] = ', '.join(recipients)    msg['Subject'] = subject    # 添加正文    main_part = MIMEText(message, 'plain')    msg.attach(main_part)    # 连接到 SMTP 服务器    serverobj = smtplib.SMTP(server, port)    serverobj.starttls()    serverobj.login(sender, 'your_password')    # 发送邮件    serverobj.sendmail(sender, recipients, subject, msg.as_string())    # 设置定时器    serverobj.quit()    # 设置下一个发送时间    next_send_time = time.strftime('%H:%M:%S', time.localtime() + timedelta(hours=1))    while time.strftime('%H:%M:%S', time.localtime()) < next_send_time:        serverobj.sendmail(sender, recipients, subject, msg.as_string())        time.sleep(60)    serverobj.quit()

关键词: 定时发送MIMEMultipartMIMETexttimedeltatime.strftime()time.sleep()

解释:

  • 使用 timedelta 来设置发送间隔。
  • 使用 time.strftime 来获取当前时间,比较是否需要继续发送邮件。

10. 邮件链式发送 - 将邮件发送与附件上传链式操作

在某些情况下,需要将邮件发送与附件上传链式操作结合在一起。以下是一个简单的示例:

def send_email(sender, recipients, subject, message):    # 连接到 SMTP 服务器    server = 'smtp.example.com'  # 根据实际服务器地址进行调整    port = 587  # SMTP 服务器的端口    # 建立一个 SMTP 对象    serverobj =.SMTP(server, port)    # 连接方式:从客户端出发(即从计算机出发,通过 SMTP 服务器发送邮件)    serverobj.ehlo()    serverobj.starttls()  # 启用 SSL/TLS 加密传输    # 登录到 SMTP 服务器    serverobj.login(sender, 'your_password')  # 替换为实际的密码    # 发送邮件    serverobj.sendmail(sender, recipients, subject, message)    # 关闭 SMTP 对象    serverobj.quit()0

4.2/5 - (9 votes)


蜂邮EDM邮件营销系统烽火邮箱企业邮箱

【蜂邮EDM】:邮件群发系统,EDM邮件营销平台,邮件代发服务。 查看价格
【AokSend邮件API】:触发式邮件API,15元/万封,99%送达率。 查看价格
【烽火邮箱】:新人领取免费域名邮箱,可用作企业邮箱公司邮箱。 查看价格

扫描二维码推送至手机访问。

版权声明:本文由MailBing邮件营销博客发布,如需转载请注明出处。

本文链接:https://mailbing.com/edm/id6032.html

分享给朋友: