📜  使用Ruby发送电子邮件-SMTP

📅  最后修改于: 2020-10-16 06:02:04             🧑  作者: Mango


简单邮件传输协议(SMTP)是一种协议,用于处理在邮件服务器之间发送电子邮件和路由电子邮件。

Ruby为简单邮件传输协议(SMTP)客户端连接提供了Net :: SMTP类,并提供了newstart这两个类方法。

  • 新的有两个参数-

    • 服务器名称默认为localhost。

    • 默认为知名端口25的端口号

  • 启动方法采用以下参数-

    • 服务器-SMTP服务器的IP名称,默认为localhost。

    • 端口-端口号,默认为25。

    • -邮件发送者的域,默认为ENV [“ HOSTNAME”]。

    • 帐户-用户名,默认为nil。

    • 密码-用户密码,默认为nil。

    • authtype-授权类型,默认为cram_md5

SMTP对象具有一个称为sendmail的实例方法,通常将用于执行邮件发送工作。它需要三个参数-

  • -一个字符串或数组或任何内容,每个迭代器一次返回一个字符串。

  • 发送者-将在出现电子邮件领域的字符串。

  • 接收者-一个字符串或表示收件人的收件人(多个)字符串的数组。

这是使用Ruby脚本发送一封电子邮件的简单方法。尝试一次-

require 'net/smtp'

message = <
To: A Test User 
Subject: SMTP e-mail test

This is a test e-mail message.
MESSAGE_END

Net::SMTP.start('localhost') do |smtp|
  smtp.send_message message, 'me@fromdomain.com', 'test@todomain.com'
end

在这里,您已经使用文档在邮件中放置了基本电子邮件,请注意正确设置标题格式。电子邮件需要发件人收件人主题标头,并以空白行与电子邮件正文分开。

要发送邮件,请使用Net :: SMTP连接到本地计算机上的SMTP服务器,然后使用send_message方法以及消息,发件人地址和目标地址作为参数(即使from和to地址是在电子邮件本身中,它们并不总是用于路由邮件)。

如果您不在计算机上运行SMTP服务器,则可以使用Net :: SMTP与远程SMTP服务器通信。除非您使用Webmail服务(例如Hotmail或Yahoo! Mail),否则您的电子邮件提供商将向您提供可以提供给Net :: SMTP的外发邮件服务器详细信息,如下所示-

Net::SMTP.start('mail.your-domain.com')

此行代码使用任何用户名或密码连接到mail.your-domain.com的端口25上的SMTP服务器。但是,如果需要,您可以指定端口号和其他详细信息。例如-

Net::SMTP.start('mail.your-domain.com', 
                25, 
                'localhost', 
                'username', 'password' :plain)

本示例使用纯文本格式的用户名和密码连接到mail.your-domain.com上的SMTP服务器。它将客户端的主机名标识为localhost。

使用Ruby发送HTML电子邮件

当您使用Ruby发送短信时,所有内容都将被视为简单文本。即使您将HTML标签包含在文本消息中,它也将显示为简单文本,并且不会根据HTML语法设置HTML标签的格式。但是Ruby Net :: SMTP提供了将HTML消息作为实际HTML消息发送的选项。

发送电子邮件时,您可以指定Mime版本,内容类型和字符集来发送HTML电子邮件。

以下是将HTML内容作为电子邮件发送的示例。尝试一次-

require 'net/smtp'

message = <
To: A Test User 
MIME-Version: 1.0
Content-type: text/html
Subject: SMTP e-mail test

This is an e-mail message to be sent in HTML format

This is HTML message.

This is headline.

MESSAGE_END Net::SMTP.start('localhost') do |smtp| smtp.send_message message, 'me@fromdomain.com', 'test@todomain.com' end

通过电子邮件发送附件

要发送包含混合内容的电子邮件,需要将Content-type标头设置为multipart / mixed 。然后可以在边界内指定文本和附件节。

边界以两个连字符开头,后跟一个唯一的数字,该数字不能出现在电子邮件的消息部分。表示电子邮件最后部分的最后边界也必须以两个连字符结尾。

传输前,应使用pack(“ m”)函数对附件进行编码,使其具有base64编码。

以下是示例,该示例将发送文件/tmp/test.txt作为附件。

require 'net/smtp'

filename = "/tmp/test.txt"
# Read a file and encode it into base64 format
filecontent = File.read(filename)
encodedcontent = [filecontent].pack("m")   # base64

marker = "AUNIQUEMARKER"
body = <
To: A Test User 
Subject: Sending Attachement
MIME-Version: 1.0
Content-Type: multipart/mixed; boundary = #{marker}
--#{marker}
EOF

# Define the message action
part2 = < e  
   print "Exception occured: " + e  
end  

注意–您可以在数组内指定多个目标,但应将其用逗号分隔。