Ruby 发送邮件 - SMTP学习笔记

简介

本文将介绍如何使用Ruby发送邮件,并基于SMTP协议展开讲解。

SMTP简介

SMTP是Simple Mail Transfer Protocol的缩写,即简单邮件传输协议。它是一种用于发送和接收电子邮件的标准协议,SMTP是TCP/IP协议族的一部分,由RFC 821规范定义。实现SMTP协议的服务器通常监听TCP协议的25端口,而客户端则通过TCP协议的25端口与服务器建立连接,进行SMTP通信。

Ruby发送邮件

在Ruby中,我们可以使用Net::SMTP模块来发送邮件。这个模块提供了一个SMTP客户端的实现,可以用于连接SMTP服务器并发送邮件。

连接SMTP服务器

使用Net::SMTP.start方法连接SMTP服务器,它需要三个参数:SMTP服务器地址、SMTP服务器端口号、以及可选的域名(默认为“localhost”)。

rubyCopy Code
require 'net/smtp' smtp = Net::SMTP.start('smtp.example.com', 25)

发送邮件

连接服务器成功后,我们可以使用smtp.send_message方法来发送邮件。该方法需要4个参数:邮件内容、发件人地址、收件人地址(可以是多个地址),以及可选的抄送地址和密送地址。

rubyCopy Code
require 'net/smtp' message = <<MESSAGE_END From: Ruby SMTP <ruby@smtp.com> To: John Doe <johndoe@example.com> Subject: SMTP Email Test This is a test email sent from Ruby SMTP. MESSAGE_END smtp = Net::SMTP.start('smtp.example.com', 25) smtp.send_message message, 'ruby@smtp.com', 'johndoe@example.com' smtp.finish

完整示例

rubyCopy Code
require 'net/smtp' message = <<MESSAGE_END From: Ruby SMTP <ruby@smtp.com> To: John Doe <johndoe@example.com> Subject: SMTP Email Test This is a test email sent from Ruby SMTP. MESSAGE_END smtp = Net::SMTP.start('smtp.example.com', 25) smtp.send_message message, 'ruby@smtp.com', 'johndoe@example.com' smtp.finish

实例

假设我们要向多个收件人发送一封HTML格式的邮件,可以使用以下代码:

rubyCopy Code
require 'net/smtp' message = <<MESSAGE_END From: Ruby SMTP <ruby@smtp.com> To: John Doe <johndoe@example.com>, Jane Doe <janedoe@example.com> Cc: Alice <alice@example.com> Subject: SMTP Email Test Content-Type: text/html; charset=UTF-8 <html> <head></head> <body> <p>This is a test email sent from <strong>Ruby SMTP</strong>.</p> </body> </html> MESSAGE_END smtp = Net::SMTP.start('smtp.example.com', 25) smtp.send_message message, 'ruby@smtp.com', ['johndoe@example.com','janedoe@example.com'], ['alice@example.com'] smtp.finish

在上面的示例中,我们使用了Cc(抄送)参数来添加一个抄送地址,并使用了Content-Type参数来指定邮件内容为HTML格式。

结语

本文通过介绍SMTP协议以及Ruby的Net::SMTP模块,帮助读者了解如何使用Ruby发送邮件。如果您有任何疑问,欢迎在评论区留言。