gpt4 book ai didi

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

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章在Ruby中利用Net::SMTP类发送电子邮件的教程由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

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

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

    new 带两个参数

  1.         server name 默认为 localhost
  2.         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脚本的方法来发送一个电子邮件。试一次看看吧:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
require 'net/smtp'
 
message = << MESSAGE_END
From: Private Person <me @fromdomain .com>
To: A Test User <test @todomain .com>
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,具体如下:

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

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

?
1
2
3
4
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内容。试一次看看吧:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
require 'net/smtp'
 
message = << MESSAGE_END
From: Private Person <me @fromdomain .com>
To: A Test User <test @todomain .com>
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
 
<b>This is HTML message.</b>
<h1>This is headline.</h1>
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 作为附件发送。试一次看看吧:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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 =<< EOF
This is a test email to send an attachement.
EOF
 
# Define the main headers.
part1 =<< EOF
From: Private Person <me @fromdomain .net>
To: A Test User <test @todmain .com>
Subject: Sending Attachement
MIME -Version: 1 . 0
Content-Type: multipart/mixed; boundary= #{marker}
-- #{marker}
EOF
 
# Define the message action
part2 =<< EOF
Content-Type: text/plain
Content-Transfer-Encoding:8bit
 
#{body}
-- #{marker}
EOF
 
# Define the attachment section
part3 =<< EOF
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

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

最后此篇关于在Ruby中利用Net::SMTP类发送电子邮件的教程的文章就讲到这里了,如果你想了解更多关于在Ruby中利用Net::SMTP类发送电子邮件的教程的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com