📅  最后修改于: 2020-10-16 06:02:04             🧑  作者: Mango
简单邮件传输协议(SMTP)是一种协议,用于处理在邮件服务器之间发送电子邮件和路由电子邮件。
Ruby为简单邮件传输协议(SMTP)客户端连接提供了Net :: SMTP类,并提供了new和start这两个类方法。
新的有两个参数-
服务器名称默认为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标签包含在文本消息中,它也将显示为简单文本,并且不会根据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
注意–您可以在数组内指定多个目标,但应将其用逗号分隔。