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的更多相关文章

  1. 雷林鹏分享:Ruby 循环

    Ruby 循环 Ruby 中的循环用于执行相同的代码块若干次.本章节将详细介绍 Ruby 支持的所有循环语句. Ruby while 语句 语法 while conditional [do] code ...

  2. 雷林鹏分享:Ruby 安装 - Windows

    Ruby 安装 - Windows 下面列出了在 Windows 机器上安装 Ruby 的步骤. 注意:在安装时,您可能有不同的可用版本. 下载最新版的 Ruby 压缩文件.请点击这里下载. 下载 R ...

  3. 雷林鹏分享:Ruby 安装 - Unix

    Ruby 安装 - Unix 下面列出了在 Unix 机器上安装 Ruby 的步骤. 注意:在安装之前,请确保您有 root 权限. 下载最新版的 Ruby 压缩文件.请点击这里下载. 下载 Ruby ...

  4. 雷林鹏分享:Ruby 命令行选项

    Ruby 命令行选项 Ruby 一般是从命令行运行,方式如下: $ ruby [ options ] [.] [ programfile ] [ arguments ... ] 解释器可以通过下列选项 ...

  5. 雷林鹏分享:Ruby 语法

    Ruby 语法 让我们编写一个简单的 Ruby 程序.所有的 Ruby 文件扩展名都是 .rb.所以,把下面的源代码放在 test.rb 文件中. #!/usr/bin/ruby -w puts &q ...

  6. 雷林鹏分享:Ruby 环境变量

    Ruby 环境变量 Ruby 解释器使用下列环境变量来控制它的行为.ENV 对象包含了所有当前设置的环境变量列表. 变量描述 DLN_LIBRARY_PATH动态加载模块搜索的路径. HOME当没有参 ...

  7. 雷林鹏分享:Ruby 类和对象

    Ruby 类和对象 Ruby 是一种完美的面向对象编程语言.面向对象编程语言的特性包括: 数据封装 数据抽象 多态性 继承 这些特性将在 面向对象的 Ruby 中进行讨论. 一个面向对象的程序,涉及到 ...

  8. 雷林鹏分享:Ruby 数据类型

    Ruby 数据类型 本章节我们将为大家介绍 Ruby 的基本数据类型. Ruby支持的数据类型包括基本的Number.String.Ranges.Symbols,以及true.false和nil这几个 ...

  9. 雷林鹏分享:Ruby 变量

    Ruby 变量 变量是持有可被任何程序使用的任何数据的存储位置. Ruby 支持五种类型的变量.您已经在前面的章节中大概了解了这些变量,本章节将为您详细讲解这五种类型的变量. Ruby 全局变量 全局 ...

随机推荐

  1. csrf_token之全局认证与局部认证

    1.settings.py没有注释到csrf.当post请求的方式会报错. 接下来就解决问题! 1. django中间件 最多5个 - process_request 请求 - process_vie ...

  2. Linux系统下 Rsync 环境安装搭建

    一.Rsync简介 1.认识 Rsync(remote synchronize)是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.Rsync使用所谓的“Rsync算法”来使本地和远 ...

  3. postgresql----TEMPORARY TABLE和UNLOGGED TABLE

    一.TEMPORARY|TEMP TABLE 会话级或事务级的临时表,临时表在会话结束或事物结束自动删除,任何在临时表上创建的索引也会被自动删除.除非用模式修饰的名字引用,否则现有的同名永久表在临时表 ...

  4. javascript飞机大战-----006创建敌机

    先写一个敌机类 /* 创建敌机: */ function Enemy(blood,speed,imgs){ //敌机left this.left = 0; //敌机top this.top = 0; ...

  5. Requested bean is currently in creation: Is there an unresolvable circular reference?

    spring容器初始化报错:循环依赖,错误信息如下: Requested bean is currently in creation: Is there an unresolvable circula ...

  6. 限制ip ssh远程登录

    有时候为了服务器的安全考虑,我们可以在服务器上做限制,禁止其他ip地址连接服务器. 方法一:修改ssh配置文件 其实做这个操作很简单,只需要改/etc/ssh/sshd_config配置文件,再最后一 ...

  7. SQL---->mySQl卸载for mac

    因为装的时候弄坏了 先来学习下怎么卸载吧,如下输入终端就好了 cd ~/ sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql* sudo rm ...

  8. Oracle性能优化之oracle里表、索引、列的统计信息

    一.表的统计信息 表的统计信息用于描述表的详细信息,包括记录数(num_rows).表块的数量(blocks).平均行长度(avg_row_len)等典型维度.这些维度可以通过数据字典表DBA_TAB ...

  9. dongle --NFC

    A dongle is a small piece of hardware that attaches to a computer, TV, or other electronic device in ...

  10. JavaWeb404排错的小技巧

    报这种错误,404后面什么都没有的话,就证明处理器映射器根据url找不到handler. 报这种错误,证明处理器映射器根据url找到了handler,转发的jsp页面找不到,说明jsp页面错了.