雷林鹏分享:Ruby 发送邮件 - SMATP
Ruby 发送邮件 - SMATP
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。
Ruby提供了 Net::SMTP 来发送邮件,并提供了两个方法 new 和 start:
new 方法有两个参数:
server name 默认为 localhost
port number 默认为 25
start 方法有以下参数:
server - SMTP 服务器 IP, 默认为 localhost
port - 端口号,默认为 25
domain - 邮件发送者域名,默认为 ENV["HOSTNAME"]
account - 用户名,默认为 nil
password - 用户密码,默认为nil
authtype - 验证类型,默认为 cram_md5
SMTP 对象实例化方法调用了 sendmail, 参数如下:
source - 一个字符串或数组或每个迭代器在任一时间中返回的任何东西。
sender -一个字符串,出现在 email 的表单字段。
recipients - 一个字符串或字符串数组,表示收件人的地址。
实例
以下提供了简单的Ruby脚本来发送邮件:
require 'net/smtp'
message = <<message_end< p="">
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
在以上实例中,你已经设置了一个基本的电子邮件消息,注意正确的标题格式。一个电子邮件要要From,To和Subject,文本内容与头部信息间需要一个空行。
使用Net::SMTP连接到本地机器上的SMTP服务器,使用send_message方法来发送邮件,方法参数为发送者邮件与接收者邮件。
如果你没有运行在本机上的SMTP服务器,您可以使用Net::SMTP与远程SMTP服务器进行通信。如果使用网络邮件服务(如Hotmail或雅虎邮件),您的电子邮件提供者会为您提供发送邮件服务器的详细信息:
Net::SMTP.start('mail.your-domain.com')
以上代码将连接主机为 mail.your-domain.com,端口号为 25的邮件服务器,如果需要填写用户名密码,则代码如下:
Net::SMTP.start('mail.your-domain.com',
25,
'localhost',
'username', 'password' :plain)
以上实例使用了指定的用户名密码连接到主机为 mail.your-domain.com,端口号为 25的邮件服务器。
使用 Ruby 发送 HTML 邮件
Net::SMTP同样提供了支持发送 HTML 格式的邮件。
发送电子邮件时你可以设置MIME版本,文档类型,字符集来发送HTML格式的邮件。
实例
以下实例用于发送 HTML 格式的邮件:
require 'net/smtp'
message = <<message_end< p="">
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
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"
# 读取文件并编码为base64格式
filecontent = File.read(filename)
encodedcontent = [filecontent].pack("m") # base64
marker = "AUNIQUEMARKER"
body =<<eof< p="">
This is a test email to send an attachement.
EOF
# 定义主要的头部信息
part1 =<<eof< p="">
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
# 定义消息动作
part2 =<<eof< p="">
Content-Type: text/plain
Content-Transfer-Encoding:8bit
#{body}
--#{marker}
EOF
# 定义附件部分
part3 =<<eof< p="">
Content-Type: multipart/mixed; name=\"#{filename}\"
Content-Transfer-Encoding:base64
Content-Disposition: attachment; filename="#{filename}"
#{encodedcontent}
--#{marker}--
EOF
mailtext = part1 + part2 + part3
# 发送邮件
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 发送邮件 - SMATP的更多相关文章
- 雷林鹏分享:Ruby 循环
Ruby 循环 Ruby 中的循环用于执行相同的代码块若干次.本章节将详细介绍 Ruby 支持的所有循环语句. Ruby while 语句 语法 while conditional [do] code ...
- 雷林鹏分享:Ruby 安装 - Windows
Ruby 安装 - Windows 下面列出了在 Windows 机器上安装 Ruby 的步骤. 注意:在安装时,您可能有不同的可用版本. 下载最新版的 Ruby 压缩文件.请点击这里下载. 下载 R ...
- 雷林鹏分享:Ruby 安装 - Unix
Ruby 安装 - Unix 下面列出了在 Unix 机器上安装 Ruby 的步骤. 注意:在安装之前,请确保您有 root 权限. 下载最新版的 Ruby 压缩文件.请点击这里下载. 下载 Ruby ...
- 雷林鹏分享:Ruby 命令行选项
Ruby 命令行选项 Ruby 一般是从命令行运行,方式如下: $ ruby [ options ] [.] [ programfile ] [ arguments ... ] 解释器可以通过下列选项 ...
- 雷林鹏分享:Ruby 语法
Ruby 语法 让我们编写一个简单的 Ruby 程序.所有的 Ruby 文件扩展名都是 .rb.所以,把下面的源代码放在 test.rb 文件中. #!/usr/bin/ruby -w puts &q ...
- 雷林鹏分享:Ruby 环境变量
Ruby 环境变量 Ruby 解释器使用下列环境变量来控制它的行为.ENV 对象包含了所有当前设置的环境变量列表. 变量描述 DLN_LIBRARY_PATH动态加载模块搜索的路径. HOME当没有参 ...
- 雷林鹏分享:Ruby 类和对象
Ruby 类和对象 Ruby 是一种完美的面向对象编程语言.面向对象编程语言的特性包括: 数据封装 数据抽象 多态性 继承 这些特性将在 面向对象的 Ruby 中进行讨论. 一个面向对象的程序,涉及到 ...
- 雷林鹏分享:Ruby 数据类型
Ruby 数据类型 本章节我们将为大家介绍 Ruby 的基本数据类型. Ruby支持的数据类型包括基本的Number.String.Ranges.Symbols,以及true.false和nil这几个 ...
- 雷林鹏分享:Ruby 变量
Ruby 变量 变量是持有可被任何程序使用的任何数据的存储位置. Ruby 支持五种类型的变量.您已经在前面的章节中大概了解了这些变量,本章节将为您详细讲解这五种类型的变量. Ruby 全局变量 全局 ...
随机推荐
- spring-boot集成redis
application.properties #redis 配置 # Redis数据库索引(默认为0) spring.redis.database=0 # Redis服务器地址 spring.redi ...
- python操作redis详解
https://www.cnblogs.com/koka24/p/5841826.html
- Python开发【模块】:PyMySQL
PyMySQL 1.安装 [root@localhost ~]# pip install PyMySQL 2.初识 创建数据表结构: mysql> CREATE TABLE `users` ( ...
- qt——类大全
qt类总结地址 http://www.kuqin.com/qtdocument/ QWidget.QDialog及QMainWindow的区别 QWidget类是所有用户界面对象的基类. 窗口部件是用 ...
- python练习汇总
1.99乘法表 """ 题目:输出 9*9 乘法口诀表. """ for i in range(1, 10): print () for j ...
- 前端 html head meta
META(Metadata information) 提供有页面的元信息 例如:页面编码.刷新.跳转.针对搜索引擎和更新频道的描述和关键词 1.另外一种编码写法 <meta http-equiv ...
- Spark调优秘诀
1.诊断内存的消耗 在Spark应用程序中,内存都消耗在哪了? 1.每个Java对象都有一个包含该对象元数据的对象头,其大小是16个Byte.由于在写代码时候,可能会出现这种情况:对象头比对象本身占有 ...
- Spark Streaming里面使用文本分析模型
功能:接收来自kafka的数据,数据是一篇文章,来判断文章的类型,把判断的结果一并保存到Hbase,并把文章建立索引(没有代码只有一个空壳,可以自己实现,以后有机会了可能会补上) import org ...
- nmon 命令
nmon 命令 用途 以交互方式显示本地系统统计信息并以记录方式记录系统统计信息. 语法 交互方式: nmon [ -h ] nmon [ -s < seconds >] [ -c < ...
- 【PGM】Representation--Knowledge Engineering,不同的模型表示,变量的类型,structure & parameters
Part 1. 重要的区别: Template based vs. specific Directed vs. undirected Generative vs. discrimina ...