如何用Python保障电子邮件发送安全?身份验证与加密是关键

AI 概述
电子邮件加密和身份验证对保护邮件安全至关重要。本文介绍了在Python中发送安全电子邮件的方法,包括使用SMTP和Gmail SMTP服务,借助smtplib等库实现。文中详细说明了如何进行电子邮件验证,以及SSL、TLS、E2EE等加密方式在Python中的实现,还给出了发送纯文本、带附件、HTML邮件的完整代码示例。此外,强调了测试电子邮件的重要性,并给出了测试代码,最后提出电子邮件安全发送的最佳实践,如保护数据、加密认证等。
目录
文章目录隐藏
  1. 设置你的 Python 环境
  2. 使用 Python 进行电子邮件验证
  3. 使用 Python 加密电子邮件
  4. 结合身份验证和加密
  5. 使用身份验证和加密来测试电子邮件
  6. 电子邮件安全发送的最佳实践
  7. 结语

如何用 Python 保障电子邮件发送安全?身份验证与加密是关键

电子邮件加密和身份验证是现代最常用的安全技术,我们可以使用这些技术来保护用户的电子邮件及其内容免受未经授权的访问。

从个人到企业主,都使用电子邮件进行正式通信,其中可能包含敏感信息。因此,保护电子邮件非常重要,尤其是在网络攻击如网络钓鱼、短信钓鱼等大幅增加的情况下。

在本文中,我将讨论如何使用电子邮件加密和认证来安全地在 Python 中发送电子邮件。

设置你的 Python 环境

在开始编写发送电子邮件的代码之前,默认你已配置好 Python 环境,并配置所需的库。

你可以使用以下方法在 Python 中发送电子邮件:

  • 简单邮件传输协议 (SMTP): 由于 Python 提供了一个内置库或模块 (smtplib) 来发送电子邮件,这个应用级协议简化了这个过程。它适用于各种规模的企业和个人,以自动化Python 中的安全电子邮件发送。我们在这本文中使用了 Gmail SMTP 服务
  • 电子邮件 API:可以利用第三方 API,如 Mailtrap Python SDK、SendGrid、Gmail API 等,以 Python 发送电子邮件。此方法提供了更多功能和高电子邮件投递速度,但是需要一些投资。

在这个教程中,我们选择第一个选项——使用 SMTP 在 Python 中发送电子邮件,通过smtplib库来实现。这个库使用 RFC 821 协议,并与 SMTP 和邮件服务器互动,来简化从你的应用程序中发送电子邮件的过程。此外,你还需要安装一些包来启用Python 电子邮件加密、认证和格式化。

步骤 1:安装 Python

这里我假设你电脑上已经安装了 python,请运行此代码来验证它:

python –version

步骤 2: 安装必要的模块和库

  • smtplib: 用来处理 SMTP 通信。使用以下代码导入 smtplib 并连接到您的电子邮件服务器:
    import smtplib
  • email模块:提供了用于构造和解析电子邮件的类(Subject, To, From 等)。它还通过多用途互联网邮件扩展 (MIME) 促进电子邮件的编码和解码。
  • MIMEText:它用于格式化您的电子邮件,并支持发送包含文本和附件(如图片、视频等)的电子邮件。使用以下代码导入:
    import MIMEText
  • MIMEMultipart::此库分别在您的电子邮件中添加附件和文本部分。
    import MIMEMultipart
  • ssl:它提供了安全套接层 (SSL) 加密。

步骤 3: 创建一个 Gmail 账户

使用 Gmail SMTP 电子邮件服务发送电子邮件时,个人建议创建一个测试账户来编写代码。测试完代码后删除该账户。

因为,需要修改 Gmail 帐户的安全设置,来允许从 Python 代码发送电子邮件。这个操作可能会暴露登录详细信息,从而导致账号的安全风险。同时,在测试阶段还会向您的帐户发送过多的测试电子邮件。

这就是我为什么建议,不要使用你自己的 Gmail 账户,而是创建一个新的账户来创建和测试代码。以下是操作方法:

  • 创建一个新的 Gmail 账户
  • 设置应用密码:
    Google Account > Security > Turn on 2-Step Verification > Security > Set up an App Password
    接下来,定义一个应用密码的名称并点击“生成”。按照屏幕上的说明进行操作后,您将获得一个 16 位数字的密码。

在使用 Python 发送电子邮件时,请使用此密码。这里我们使用 Gmail SMTP,如果您想使用其他邮件服务提供商,请按照相同的步骤操作。或者,联系公司的 IT 团队以获取访问您的 SMTP 服务器的支持。

使用 Python 进行电子邮件验证

电子邮件验证是一种安全机制,用于验证发件人的身份,确保域的电子邮件是合法的。如果您没有电子邮件验证机制,您的电子邮件可能会被放入垃圾邮件文件夹,或者恶意行为者可以伪造或拦截它们。这可能会影响您的电子邮件投递率和发件人的声誉。

启用Python 电子邮件认证机制和协议是这个原因:

  • SMTP 认证:如果使用像 Gmail SMTP 这样的 SMTP 服务器发送电子邮件,我们可以使用这种认证方法。它通过特定的邮件服务器验证发件人的真实性。
  • SPF:代表发件人策略框架,检查发送服务器的 IP 地址是否在其中
  • DKIM:代表域密钥识别邮件,用于向电子邮件添加数字签名,以确保在传输过程中没有人可以更改电子邮件的内容。接收方的服务器将随后验证数字签名。因此,你的所有电子邮件及其内容都保持安全和未更改。
  • DMARC:代表域基于消息的认证、报告和合规性。DMARC 指示邮件服务器在电子邮件验证失败时应采取什么行动。此外,它会在检测到您域上的任何可疑活动时提供报告。

如何在 Python 中实现电子邮件验证?

要使用 SMTP 在 Python 中验证您的电子邮件,smtplib库很有用。以下是Python SMTP 安全的运作方式:

import smtplib

server = smtplib.SMTP('smtp.domain1.com', 587)
server.starttls()  # Start TLS for secure connection
server.login('my_email@domain1.com', 'my_password')

message = "Subject: Test Email."
server.sendmail('my_email@domain1.com', 'receiver@domain2.com', message)

server.quit()

实施电子邮件身份验证将为我们的电子邮件增加一层额外的安全保护,防止其被攻击者攻击或被标记为垃圾邮件。

使用 Python 加密电子邮件

加密电子邮件可以保护我们的电子邮件内容,使只有授权的发件人和收件人才能访问或查看内容。使用 Python 加密电子邮件是通过加密技术对电子邮件消息进行编码并将其转换为安全且不可读的格式(也称为密文)。

这样,电子邮件加密可以保护消息不被未经授权的访问或攻击者拦截。

这里有所不同类型的电子邮件加密:

  • SSL: 这是指安全套接层,是最流行和广泛使用的加密协议之一。SSL 通过加密在邮件服务器和客户端之间传输的数据来确保电子邮件的机密性。
  • TLS: 这代表传输层安全,是当今常见的电子邮件加密协议。许多人认为它是 SSL 的极佳替代品。它加密了电子邮件客户端和邮件服务器之间的连接,以防止在传输过程中有任何人拦截电子邮件。
  • E2EE: 这是指端到端加密,确保只有具有有效凭证的预期收件人才能解密电子邮件内容并阅读。其目的是防止电子邮件被拦截并保护消息的安全。

如何在 Python 中实现电子邮件加密?

如果你的邮件服务器需要 SSL 加密,这里是如何在 Python 中发送电子邮件:

import smtplib
import ssl

context = ssl.create_default_context()

server = smtplib.SMTP_SSL('smtp.domain1.com', 465, context=context)  # This is for SSL connections, requiring port number 465
server.login('my_email@domain1.com', 'my_password')

message = "Subject: SSL Encrypted Email."
server.sendmail('my_email@domain1.com', 'receiver@domain2.com', message)

server.quit()

对于 TLS 连接,你需要smtplib库:

import smtplib

server = smtplib.SMTP('smtp.domain1.com', 587)  # TLS requires 587 port number
server.starttls()  # Start TLS encryption
server.login('my_email@domain1.com', 'my_password')

message = "Subject: TLS Encrypted Email."
server.sendmail('my_email@domain1.com', 'receiver@domain2.com', message)

server.quit()

对于端到端加密,就需要更高级的库或工具,例如 GnuPG、OpenSSL、Signal 协议等。

结合身份验证和加密

使用 Python 进行电子邮件安全 需要同时使用加密和身份验证。这确保了邮件服务器认为电子邮件是合法的,并且在传输过程中保持安全,不受网络攻击者和未经授权的访问影响。对于电子邮件加密,我们可以使用 SSL 或 TLS,并将其与 SMTP 身份验证结合使用,以建立强大的电子邮件连接。

讲到这儿你已经知道如何在电子邮件中启用电子邮件加密和身份验证,让我们来看一些完整的代码示例,了解如何使用 Gmail SMTP 和电子邮件加密(SSL)在 Python 中发送安全电子邮件。

代码示例

1. 发送纯文本邮件

import smtplib
from email.mime.text import MIMEText

subject = "Plain Text Email"
body = "This is a plain text email using Gmail SMTP and SSL."
sender = "sender1@gmail.com"
receivers = ["receiver1@gmail.com", "receiver2@gmail.com"]
password = "my_password"

def send_email(subject, body, sender, receivers, password):
    msg = MIMEText(body)

    msg['Subject'] = subject
    msg['From'] = sender
    msg['To'] = ', '.join(receivers)

with smtplib.SMTP_SSL('smtp.gmail.com', 465) as smtp_server:
    smtp_server.login(sender, password)
    smtp_server.sendmail(sender, receivers, msg.as_string()) 

    print("The plain text email is sent successfully!")

send_email(subject, body, sender, receivers, password)

解释:

  • sender:这包含发件人的地址。
  • receivers:这包含接收者 1 和接收者 2 的电子邮件地址。
  • msg:这是电子邮件的内容。
  • sendmail():这是 SMTP 对象的实例方法。它接受三个参数 – 发件人、收件人和消息,并发送消息。
  • with:这是一个上下文管理器,用于在发送电子邮件后正确关闭 SMTP 连接。
  • MIMEText:这仅适用于纯文本。

2. 发送带附件的电子邮件

要以安全的方式在 Python 中发送带附件的电子邮件,需要一些额外的库,如 MIMEBase 和编码器。代码如下:

import smtplib
from email import encoders
from email.mime.base import MIMEBase
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText

sender = "sender1@gmail.com"
password = "my_password"
receiver = "receiver1@gmail.com"
subject = "Email with Attachments"
body = "This is an email with attachments created in Python using Gmail SMTP and SSL."

with open("attachment.txt", "rb") as attachment:
    part = MIMEBase("application", "octet-stream")   # Adding the attachment to the email
    part.set_payload(attachment.read())
    
encoders.encode_base64(part)
part.add_header(
    "Content-Disposition",  # The header indicates that the file name is an attachment. 
    f"attachment; filename='attachment.txt'",
)

message = MIMEMultipart()
message['Subject'] = subject
message['From'] = sender
message['To'] = receiver
html_part = MIMEText(body)
message.attach(html_part)   # To attach the file
message.attach(part)
with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
    server.login(sender, password)
    server.sendmail(sender, receiver, message.as_string())

解释:

  • MIMEMultipart:这个库允许你将文本和附件分别添加到电子邮件中。
  • rb: 它表示附件以二进制模式打开并读取内容。
  • MIMEBase:此对象适用于任何文件类型。
  • 编码和 Base64:文件将被编码为 Base64 以安全地发送电子邮件。

在 Python 中发送 HTML 电子邮件

要使用 Gmail SMTP 通过 Python 发送 HTML 电子邮件,我们需要一个类 – MIMEText。

以下是完整的代码用于 Python 发送 HTML 邮件:

import smtplib
from email.mime.text import MIMEText

sender = "sender1@gmail.com"
password = "my_password"

receiver = "receiver1@gmail.com"
subject = "HTML Email in Python"

body = """
<html>
  <body>
    <p>HTML email created in Python with SSL and Gmail SMTP.</p>
  </body>
</html>
"""

message = MIMEText(body, 'html')    # To attach the HTML content to the email

message['Subject'] = subject
message['From'] = sender
message['To'] = receiver

with smtplib.SMTP_SSL('smtp.gmail.com', 465) as server:
   server.login(sender, password)
   server.sendmail(sender, receiver, message.as_string())

使用身份验证和加密来测试电子邮件

在向目标收件人发送电子邮件之前,请始终在测试服务器上测试我们的电子邮件,特别是在批量发送电子邮件时。测试电子邮件具有以下优势:

  • 确保电子邮件发送功能正常运行;
  • 电子邮件格式正确,没有损坏的链接或附件;
  • 防止向收件人的收件箱发送大量测试邮件;
  • 提高电子邮件的送达率并降低垃圾邮件率;
  • 确保电子邮件及其内容免受攻击和未经授权的访问。

要测试在 Python 中启用身份验证和加密发送电子邮件的这种组合设置,需使用像 Mailtrap Email Testing 这样的电子邮件测试服务器。这将捕获所有来自预发布环境的 SMTP 流量,并在发送电子邮件之前检测和调试它们。它还将分析电子邮件内容,验证 CSS/HTML,并提供垃圾邮件评分,以便我们可以改进电子邮件发送。

开始:

  • 打开 Mailtrap 电子邮件测试;
  • 前往“我的收件箱”;
  • 点击“显示凭证”获取我们的测试凭证——登录和密码详细信息。

这是测试您的电子邮件的完整代码示例:

import smtplib
from socket import gaierror

port = 2525  # Define the SMTP server separately
smtp_server = "sandbox.smtp.mailtrap.io"
login = "xyz123"  # Paste your Mailtrap login details
password = "abc$$"  # Paste your Mailtrap password
sender = "test_sender@test.com"
receiver = "test_receiver@example.com"

message = f"""\
Subject: Hello There!
To: {receiver}
From: {sender}
This is a test email."""

try:
    with smtplib.SMTP(smtp_server, port) as server:  # Use Mailtrap-generated credentials for port, server name, login, and password
        server.login(login, password)
        server.sendmail(sender, receiver, message)
    print('Sent')

except (gaierror, ConnectionRefusedError):  # In case of errors
    print('Unable to connect to the server.')

except smtplib.SMTPServerDisconnected:
    print('Server connection failed!')

except smtplib.SMTPException as e:
    print('SMTP error: ' + str(e))

如果没有错误,可以在收件人的收件箱中看到此消息:his is a test email.

电子邮件安全发送的最佳实践

考虑以下Python 电子邮件最佳实践用于安全发送电子邮件:

  • 保护数据:采取适当的的安全措施来保护敏感数据,例如 SMTP 凭据、API 密钥等。将它们存储在安全、私密的地方,如配置文件或环境变量,确保没有人可以公开访问它们。
  • 加密和认证:始终使用电子邮件加密和认证,以确保只有授权人员可以访问您的电子邮件及其内容。对于身份验证,可以使用高级方法,如 API 密钥、双重身份验证、单点登录 (SSO) 等。同样,使用高级加密技术,如 SSL、TLS、端到端加密 (E2EE) 等。
  • 错误处理:通过在代码中使用except/try 块有效处理网络问题、身份验证错误和其他问题。
  • 速率限制:通过限制电子邮件发送功能的速率,以防止超出设置的服务限制,从而保持高电子邮件投递率。
  • 验证电子邮件:验证列表中的电子邮件地址,并删除无效的地址,以提高电子邮件的送达率并防止您的域名被标记为垃圾邮件。这里推荐可以使用一个电子邮件验证工具来完成此操作。
  • 教育:通过安全电子邮件实践和网络安全风险,使您的团队保持最新状态。监控您的垃圾邮件分数和电子邮件传递率,并努力提高它们。

结语

使用 Python 安全发送电子邮件,采用先进的电子邮件加密方法,如 SSL、TLS 和端到端加密,以及 SPF、DMARC、2FA 和 API 密钥等身份验证协议和技术。

通过结合这些安全措施,可以保护用户的机密电子邮件信息,提高电子邮件的传递性,并与目标收件人保持信任。这样,只有具备适当凭证的个人才能访问它。这将有助于防止未经授权的访问、数据泄露和其他网络安全攻击。

以上关于如何用Python保障电子邮件发送安全?身份验证与加密是关键的文章就介绍到这了,更多相关内容请搜索码云笔记以前的文章或继续浏览下面的相关文章,希望大家以后多多支持码云笔记。

「点点赞赏,手留余香」

1

给作者打赏,鼓励TA抓紧创作!

微信微信 支付宝支付宝

还没有人赞赏,快来当第一个赞赏的人吧!

声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若内容造成侵权/违法违规/事实不符,请将相关资料发送至 admin@mybj123.com 进行投诉反馈,一经查实,立即处理!
重要:如软件存在付费、会员、充值等,均属软件开发者或所属公司行为,与本站无关,网友需自行判断
码云笔记 » 如何用Python保障电子邮件发送安全?身份验证与加密是关键

发表回复