Page 1 of 1

如何使用流行语言和框架通过 SMTP 发送电子邮件

Posted: Tue Dec 03, 2024 3:58 am
by mstlucky4574
在我们的博客文章中,我们定期提供使用不同编程语言和框架发送电子邮件的教程。SMTP 服务器几乎总是讨论的方法之一。

这次我们决定整合所有这些资源,并创建一份使用 SMTP 发送电子邮件的综合指南。下面我们将提供PHP、Python、C#、Node.js、Java和Ruby的描述和代码示例,以及它们相应的框架。

电子邮件发送选项:SMTP 还是 Web API?
一般来说,发送邮件主要有两种方式:通过SMTP服务器或者Web API。

SMTP 服务器是一款将邮件从发件人传输到收件人入站邮件服务器的应用程序。它使用简单邮件传输协议(或 SMTP 协议)运行,该协议定义了发送电子邮件的术语。在此过程中,邮件在邮件传输代理 (MTA) 之间移动,这些代理通常与 SMTP 中继服务器同义。

为了成功传输消息,SMTP 客户端必须与电子邮件服务器建立连接(根据RFC 5321)。他们就像相聚喝酒叙旧的老朋友。但他们不是通过句子来交流,而是通过SMTP 命令和响应(例如 HELO、MAIL FROM、RCPT TO、DATA、AUTH 等)进行交流。SMTP 连接使用传输控制协议 (TCP) 通过SMTP 端口25、465、587 和 2525 进行。

人们通常选择 SMTP 服务器是因为:

它易于配置,不需要高级编码技能;
它可以与任何平台或电子邮件发送服务一起使用;
由于服务器和客户端之间有详细的“对话”,因此很容易排除故障。
Web API (应用程序编程接口)可以将第三方服务直接集成到您的应用或项目中。对于电子邮件,Web API 通常称为电子邮件 API。它们使用超文本传输​​协议 (HTTP) 与其他服务进行通信。在这种情况下,通信更像是一行代码,而不是完整的对话。

电子邮件 API 通过集成电子邮件服务提供商 (ESP) 使用户能够直接从他们的应用程序发送电子邮件。

以下是人们选择使用 Email API 的原因:

由于其通信距离短,与 SMTP 服务器相比速度更快;
不会遇到堵塞;
提供多种灵活的功能;
通过要求 API 密钥来提供更高的安全性。
有关 Web API 和 SMTP 服务器之间的更多差异,请查看我们的专门博客文章。

发送电子邮件之前:选择 SMTP 服务器提供商
您需要一个可靠的 SMTP 服务器提供商来发送大量电子邮件并保持良好的电子邮件传递率。在选择时,我们建议使用以下标准:

可用的功能,例如用于发送交易电子邮件的分析、统计、模板和 电话数据 电子邮件日志,以及营销电子邮件的自动化、A/B 测试、列表管理和预定交付。
可扩展性或提供商处理大量电子邮件的能力以及增加发送限制的便利性。
可靠性,包括电子邮件基础设施的状态、传递率、停机频率以及实施的隐私和安全协议/措施。
定价——提供商是否提供灵活的定价计划?所包含的功能是否与价格相符?提供商是否会追加销售基本功能,例如响应式客户支持或发送功能?
易于集成,包括 SMTP 服务、API 和现成的 SDK。注意可用的指南、教程和官方文档的清晰度。
大多数 SMTP 提供商都会在付费计划中提供免费 SMTP 服务器。这些免费服务以免费试用或免费套餐的形式提供。

最受欢迎的电子邮件提供商包括Mailgun、SendGrid、Mailchimp Transactional Email(原 Mandrill)、Postmark、Amazon SES和Mailtrap。

Image

Mailtrap 是一个面向企业、个人和开发团队的电子邮件传递平台,可让用户在一个地方测试、发送和控制其基础设施的性能。为此,它结合了两种解决方案:电子邮件测试(稍后会详细介绍)和电子邮件发送。

电子邮件发送是一种强大的电子邮件基础设施,默认情况下具有高送达率。为确保顺利且安全地设置,它同时具有电子邮件 API 和 SMTP 服务。

除了发送功能外,电子邮件发送还具有其他功能,例如可操作分析。借助它,用户可以访问全景式仪表板和邮箱提供商和类别的深入报告。这样,如果发生意外的发送问题,就可以轻松排除故障。

此图显示了 Mailtrap 电子邮件发送的统计概览功能
要开始使用 Mailtrap 电子邮件发送功能,您只需注册并按照应用内向导添加和验证您的域名即可。有关详细说明,请观看以下视频或参阅我们的入门指南。


接下来,转到发送域,单击已验证的域并导航到“SMTP/API 设置”选项卡。在那里,您需要在事务流和批量流之间以及在使用 Mailtrap 电子邮件发送的 SMTP 服务或电子邮件 API 之间进行选择。

在 API 部分,您将看到不同编程语言的现成代码片段,您可以将其直接插入到您的项目中。

此图显示了 Mailtrap 电子邮件发送的 API 凭据
在 SMTP 选项卡中,您将找到将 Mailtrap 与 SMTP 轻松集成所需的凭据。

此图显示了 Mailtrap 电子邮件发送的 SMTP 设置
对于下面的代码片段,我们将使用 Mailtrap 电子邮件发送提供的 SMTP 凭据。

开始免费发送
使用 PHP 中的 SMTP 发送电子邮件
在 PHP 中使用 SMTP 发送电子邮件的最简单、最流行的方法是通过PHPMailer。它与 PHP 5.5 及更高版本兼容。此软件包支持 SMTP 身份验证、TLS 和 SSL 安全层,自动验证电子邮件地址,并防止标头注入攻击。与 PHP 的原生 mail() 函数不同,PHPMailer 没有固有的可传递性问题。

要开始使用该包,您应该通过 composer 安装它,方法是将以下代码添加到您的composer.json文件中:

"phpmailer/phpmailer": "^6.8.0"
或者,您也可以直接运行composer require phpmailer/phpmailer,然后 PHPMailer 就会被安装。

之后,您需要做的第一件事是导入全局命名空间中的 PHPMailer 类。然后使用require语句加载自动加载器。您还需要创建一个带有true参数的实例以启用异常。

$mail = new PHPMailer(true);
现在是时候配置 SMTP 服务器了。为此,我们需要返回到我们的 Mailtrap 电子邮件发送帐户并复制 SMTP 凭据。我们还必须配置加密协议。在本例中,我们选择端口号为 587 的 STARTTLS。


最后一步是通过调用 send 方法发送测试消息。

如果您正确完成所有操作,您应该会在所选收件箱中收到一封电子邮件。收到电子邮件后,返回 Mailtrap 帐户并单击“验证设置”以开始从您的应用发送电子邮件。

注意:我们不会在接下来的部分中重复此步骤。请记住,无论您使用哪种编程语言或框架,验证您的设置都至关重要。

有关更详细的教程和其他示例,请参阅使用 PHPMailer 发送电子邮件的指南。

此外,如果您决定通过 PHP 中的 SMTP 发送不适合您,请务必查看官方 Mailtrap PHP 客户端。

在 Laravel 中使用 SMTP 发送电子邮件
Laravel 是一个免费的、开源的、可扩展的 PHP 框架,适合构建复杂的应用程序。除了其他优点外,它还允许您使用 SMTP、HTTP 或 API 发送电子邮件。这是在Symfony Mailer的帮助下完成的。

在今天的教程中,我们假设您已经启动并运行了 Laravel 应用程序。请记住,您应该在config/mail.php和.env文件中配置电子邮件服务。

要开始 SMTP 发送,您应该将以下代码行添加到.env文件中:
提供的 API 令牌替换。每个用户的用户名 (api) 都是相同的。

下一步是创建一个新的可邮寄类。在 Laravel 中,可邮寄类代表您发送的电子邮件类型。它们存储在app/Mail目录中。创建一个新的可邮寄类很容易,因为它需要运行一个简单的命令:
在 mailable 类中,您可以配置envelope、content和attachment方法以进行更深入的调整。信封用于定义电子邮件的主题和发件人地址。

}
这content使您可以定义视图,即选择要使用哪个模板来显示内容。通常,模板在 Blade 引擎上运行。如果您想发送 HTML 电子邮件,这很有用。纯文本电子邮件消息也应作为模板存储在blade.php文件中,并与 HTML 一起调用(此步骤是可选的,但建议执行)。

最后阶段是在routes/web.php文件中定义用于发送 SMTP 电子邮件的路由。为此,我们需要导入MailFacade 并指定收件人的地址。

我们在有关使用 Laravel 发送电子邮件的专门教程中更详细地描述了此过程。在那里,您还可以找到有关通过 API 添加附件和发送电子邮件的信息。在Laravel 框架的 Mailtrap 桥 [API] GitHub 页面上,您可以了解如何轻松地将此 API 集成到您的应用程序/项目中。

如果您使用 Symfony 而不是 Laravel,您可以在这里找到所有必要的信息。

使用 Python 中的 SMTP 发送电子邮件
Python 有一个使用 SMTP 服务器发送电子邮件的本机库。smtplib可用于定义 SMTP 客户端,当然,还可以路由外发电子邮件。要开始使用该库,您应该使用语句import smtplib并使用以下代码创建 SMTP 对象:

官方文档建议使用电子邮件包的功能来构建电子邮件消息并添加 MIME 附件。您可能还想查看我们的使用 Python 发送博客文章以获取分步说明。当您这样做时,不要忘记查看我们的官方 Python 客户端,以了解 SMTP 不是正确的选择的情况。

在 Django 中使用 SMTP 发送电子邮件
Django 作为一个 Python 框架,其邮件发送功能基于我们上面讨论过的smtplib。不过,主要代码片段存储在django.core.mail模块中。

首先将 SMTP 配置添加到您的settings.py文件中。将EMAIL_HOST变量与 Mailtrap 的 SMTP 主机交换并指定端口。然后继续定义主机的用户名和密码。不要忘记指定加密类型(EMAIL_USE_TLS或EMAIL_USE_SSL应设置为 true)。

)
要了解如何添加多个收件人、发送群发电子邮件或定义其他参数,请阅读此博客文章。

使用 C# 和 .NET 中的 SMTP 发送电子邮件
多年来,在 C# 中使用 SMTP 发送电子邮件的默认方式是通过 .NET 框架和 SmtpClient 类。然而,SmtpClient 现在已经过时了,因为它不符合现代安全要求和协议。微软本身建议使用MailKit或其他库。

在今天的教程中,我们将使用 MailKit – 一个跨平台 .NET 库。

与其他框架和编程语言一样,第一步是安装。转到 Visual Studio 中的包管理器控制台并运行以下命令:

Install-Package MailKit
System通过导入必要的命名空间(例如、、和)来启动代码。然后创建一个新类来表示电子邮件消息。通常,您还必须配置发件人、收件人、主题和正文。要发送电子邮件,创建一个新类很重要MailKit.Net.Smtp(不要将其与我们上面提到的 .NET 的 SmtpClient 混淆)。 MailKitMimeKitMimeMessageSmtpClient

指定 SMTP 服务器和端口后,即可使用send()方法发送电子邮件。构建必要的组件后,示例代码如下所示:
MailKit 可用于从ASP.NET C#和ASP.NET Core发送电子邮件。您可以在此处找到更多使用 C# 发送电子邮件的方法。

在 Node.js 中使用 SMTP 发送电子邮件
Nodemailer 是 Node.js 中使用 SMTP 发送电子邮件的最流行选项。尽管还有其他软件包可用,但 Nodemailer 似乎凭借其简单而强大的代码占据了主导地位。如果您对其他软件包和发送选项感兴趣,请参阅我们的详细教程。

您只需几个步骤即可开始发送电子邮件:

npm install nodemailer 使用或命令安装该包yarn add nodemailer并使用以下代码行导入它:
const nodemailer = require('nodemailer')
创建 SMTP 传输。常规选项包括host、、和port。但是,您也可以在此处指定 TLS、连接、安全、调试和其他选项。以下是包含常规选项的示例代码:
创建带有必要参数的电子邮件消息。有关支持的参数的更多信息, 请参阅官方文档。

使用 Java 中的 SMTP 发送电子邮件
与其他编程语言类似,您需要一个单独的包才能使用 SMTP 服务器在 Java 中发送电子邮件。Angus Mail(以前的 JakartaMail 和 JavaMail)通常是 Java 开发人员的首选。

注意:JakartaMail 的源代码已移至 Eclipse Angus,并且开发仍在继续。Angus Mail是 JakartaMail 的后继者。

您有两个主要的入门选项:

下载angus-mail.jar(JakartaMail 实现)和jakarta.mail-api.jar并将它们添加到 Angus Activation 的类或模块路径中。
在 Maven 仓库中 找到angus-mail.jar ,并将其添加到 Maven 依赖项中:

然后,您可以通过导入所有必要的参数来开始构建电子邮件。public class JakartaEmail包含发送电子邮件的主要方法,并使您能够设置收件人和发件人地址以及 SMTP 用户名和密码。

可以使用该对象设置 SMTP 主机、端口和其他 SMTP 参数properties。可以使用对象创建邮件主题和内容MimeMessage。

要发送电子邮件,您需要调用Transport.send(message)方法。

在 Ruby/Ruby on Rails 中使用 SMTP 发送电子邮件
我们这里要介绍的最后一种编程语言和框架分别是 Ruby 和 Ruby on Rails。它们两者使用 SMTP 发送电子邮件的首选方式是ActionMailer。有关 Ruby 特定的教程,请查看此博客文章。

通过添加以下代码行使用 RubyGems 安装 ActionMailer:

gem install actionmailer
现在我们需要在Ruby 应用程序的 app/mailers目录中创建一个新的邮件文件。

rails generate mailer User
可以使用各种帮助程序来构建电子邮件消息,这些帮助程序允许您格式化消息或添加附件。一封简单的电子邮件将如下所示: