ruby 发送html邮件,在Ruby中利用Net::SMTP类发送电子邮件的教程

简单邮件传输协议(SMTP)发送电子邮件及路由的e-mail邮件服务器之间的协议处理。

Ruby 提供 Net::SMTP 类的简单邮件传输协议(SMTP)客户端的连接,并提供了两个新的方法:new 和 start.

new 带两个参数:

server name 默认为 localhost

port number  默认为熟知的 25

start 方法带有以下这些参数:

server - IP SMTP服务器名称,默认为localhost

port - 端口号,默认为25

domain - 邮件发件人的域名,默认为 ENV["HOSTNAME"]

account - 用户名,默认为 nil

password - 用户密码,默认为 nil

authtype - 授权类型,默认为 cram_md5

SMTP对象有一个实例方法调用sendmail,后者通常会被用来做邮寄消息的工作。它有三个参数:

source - 字符串或数组或任何同每个迭代一次返回一个字符串。

sender - 一个字符串,它将会出现在电子邮件字段中。

recipients - 代表收件人的地址的字符串的字符串或数组

例子:

下面是一个简单使用Ruby脚本的方法来发送一个电子邮件。试一次看看吧:

require 'net/smtp'

message = <

From: Private Person

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  方法,从地址,目的地址作为参数(即使地址电子邮件本身范围内,这些并非总是用来将邮件路由)。

如果还没有在机器上运行一个SMTP服务器,可以使用的Net::SMTP远程SMTP服务器进行通信。除非使用一个webmail服务(如Hotmail或雅虎邮件),电子邮件提供商将提供外发邮件服务器的细节,可以提Net::SMTP,具体如下:

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

这行代码连接到SMTP服务器mail.your-domain.com 端口25。,而无需使用任何用户名或密码。不过,如果需要的话可以指定端口号或其他参数等。例如:

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 = <

From: Private Person

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。然后,文本和附件部分可以指定 boundaries 范围内。

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

附加文件使用 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 =<

This is a test email to send an attachement.

EOF

# Define the main headers.

part1 =<

From: Private Person

To: A Test User

Subject: Sending Attachement

MIME-Version: 1.0

Content-Type: multipart/mixed; boundary=#{marker}

--#{marker}

EOF

# Define the message action

part2 =<

Content-Type: text/plain

Content-Transfer-Encoding:8bit

#{body}

--#{marker}

EOF

# Define the attachment section

part3 =<

Content-Type: multipart/mixed; name=\"#{filename}\"

Content-Transfer-Encoding:base64

Content-Disposition: attachment; filename="#{filename}"

#{encodedcontent}

--#{marker}--

EOF

mailtext = part1 + part2 + part3

# Let's put our code in safe area

begin

Net::SMTP.start('localhost') do |smtp|

smtp.sendmail(mailtext, 'me@fromdomain.net',

['test@todmain.com'])

end

rescue Exception => e

print "Exception occured: " + e

end

注意:可以指定多个目的地内部数组,但他们需要用逗号分隔。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值