在 Ruby 中,发送电子邮件通常是通过 Net::SMTP 类来实现的。Net::SMTP 是 Ruby 标准库中的一部分,用于通过 SMTP(简单邮件传输协议)将电子邮件发送到指定的邮件服务器。

本指南将介绍如何使用 Ruby 通过 SMTP 发送电子邮件,包括配置 SMTP 服务器、邮件内容设置和常见的发送邮件操作。


📌 目录

  1. 🔹 什么是 SMTP?
  2. 🔹 使用 Net::SMTP 发送邮件
  3. 🔹 配置 SMTP 服务器
  4. 🔹 邮件内容构建
  5. 🔹 示例代码:发送邮件
  6. 🔹 SMTP 发送邮件的常见问题
  7. 🔹 参考资料

🔹 什么是 SMTP?

SMTP(Simple Mail Transfer Protocol)是用于 发送邮件 的协议。它定义了邮件服务器之间的通信方式,用于将邮件从客户端发送到邮件服务器,并在服务器之间传递邮件。

SMTP 协议工作在 客户端和邮件服务器 之间,通常需要 用户名、密码 等认证信息。


🔹 使用 Net::SMTP 发送邮件

Ruby 提供了 Net::SMTP 类来简化通过 SMTP 协议发送邮件的操作。通过 Net::SMTP.start 方法连接到 SMTP 服务器后,可以使用 send_messagesend_mail 方法来发送邮件。

基本语法

1
2
3
4
5
require 'net/smtp'
 
Net::SMTP.start('smtp.example.com', 25, 'example.com', 'user', 'password', :plain) do |smtp|
  smtp.send_message message, 'from@example.com', 'to@example.com'
end
  • smtp.example.com:SMTP 服务器地址
  • 25:SMTP 端口(常用端口:25、465、587)
  • example.com:邮件服务器的主机名
  • 'user':SMTP 登录用户名
  • 'password':SMTP 登录密码
  • :plain:指定认证方式,常见的有 :plain:login:cram_md5 等。

🔹 配置 SMTP 服务器

1. 配置 SMTP 地址和端口

邮件服务提供商通常会提供 SMTP 地址端口号,用于与邮件服务器进行通信。常见的端口号有:

  • 25:传统 SMTP 端口
  • 465:SSL 加密 SMTP 端口
  • 587:用于 TLS 加密的 SMTP 端口

例如,Gmail 的 SMTP 配置如下:

  • SMTP 地址:smtp.gmail.com
  • 端口号:587
  • 认证方式:LOGIN
  • 需要 SSL 或 TLS 加密。

2. 配置用户认证信息

大多数 SMTP 服务器需要认证信息,如用户名和密码。通常,SMTP 服务器提供 身份验证方式(例如 LOGINPLAINCRAM-MD5)。

在以下示例中,我们将使用 Gmail 的 SMTP 设置。


🔹 邮件内容构建

发送邮件时,您需要构建邮件内容。邮件的基本组成部分包括:

  • 发件人
  • 收件人
  • 主题
  • 邮件正文

构建邮件内容

1
2
3
4
5
6
7
message = <<MESSAGE_END
From: from@example.com
To: to@example.com
Subject: Test email from Ruby
 
This is a test email sent from Ruby using Net::SMTP.
MESSAGE_END

在邮件内容中:

  • From::发件人地址
  • To::收件人地址
  • Subject::邮件主题

通过 <<MESSAGE_END 可以创建多行字符串,表示邮件的内容部分。


🔹 示例代码:发送邮件

使用 Gmail 发送邮件

以下示例演示如何通过 Gmail 的 SMTP 服务器发送邮件:

1
2
3
4
5
6
7
8
9
10
11
12
13
require 'net/smtp'
 
message = <<MESSAGE_END
From: from@example.com
To: to@example.com
Subject: Test email from Ruby
 
This is a test email sent from Ruby using Net::SMTP.
MESSAGE_END
 
Net::SMTP.start('smtp.gmail.com', 587, 'gmail.com', 'your_email@gmail.com', 'your_password', :plain) do |smtp|
  smtp.send_message message, 'from@example.com', 'to@example.com'
end

说明

  • smtp.gmail.com:Gmail 的 SMTP 服务器地址
  • 587:SMTP 端口,通常用于 TLS 加密
  • 'your_email@gmail.com':Gmail 账户
  • 'your_password':Gmail 密码(或应用密码)

🔹 应用密码:如果启用了 2 步验证,需要使用 Gmail 提供的 应用密码


🔹 SMTP 发送邮件的常见问题

1. 邮件无法发送

  • 确保 SMTP 配置正确,包括服务器地址、端口和身份验证信息。
  • 确保 SMTP 服务器没有阻止发件人的地址。
  • 确保网络连接没有被防火墙或代理阻断。

2. 认证失败

  • 如果你使用的是 Gmail 等支持 2 步验证的邮件服务,确保使用 应用密码 而非常规密码。
  • 检查认证方法(LOGINPLAIN)是否与服务器支持的方式一致。

3. SSL/TLS 错误

  • 使用 端口 465 进行 SSL 连接,使用 端口 587 进行 TLS 连接。
  • 确保使用 ssl 选项(例如 Net::SMTP.start('smtp.gmail.com', 465, 'gmail.com', 'user', 'password', :ssl))。

🔹 参考资料


总结

  • 使用 Net::SMTP 类可以通过 SMTP 协议发送电子邮件。
  • 通过配置邮件服务器的地址、端口、认证方式和用户信息来连接 SMTP 服务器。
  • 创建邮件内容时,需要设置发件人、收件人、主题和邮件正文。
  • 发送邮件时使用 smtp.send_messagesmtp.send_mail 方法。

💡 Ruby 通过 SMTP 提供了一种简单而强大的方式来集成邮件功能,适用于发送通知邮件、报告邮件等应用场景。