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. javascript飞机大战-----007爆炸效果

    要检验什么时候碰撞,我们必须了解什么时候不相撞.以上四种情况是不相撞的时候 首先在引擎里面写好什么时候碰撞什么时候不碰撞 /* 游戏引擎 */ var Engine = { //刚开始的游戏状态 ga ...

  2. Eclipse Tomcat插件的使用

    目录 Eclipse Tomcat插件的使用 Eclipse Tomcat插件的使用 我使用的Eclipse版本是:4.6.3 Eclipse已经自带Tomcat插件,不需要再自己进行安装 1.新建T ...

  3. toml-lang - Tom's Obvious, Minimal Language

    Tom's Obvious, Minimal Languagehttps://github.com/toml-lang/toml

  4. 自动化工具构建vue项目

    其实之前对vue的话也有过一段时间的学习,博客园也是写了5篇vue的学习笔记.但是一直是通过CDN的方式在html文件头部引入vue.js,然后实例化vue对象绑定Dom,写组件写方法.就算是在实际项 ...

  5. MySQL创建索引命令

    MySQL索引类型 普通索引 创建索引的方式 -- 直接新建索引 CREATE INDEX indexName ON mytable(username(length)) -- 修改表结构新建索引 AL ...

  6. spring登录验证拦截器和根据用户角色登录

    大家都知道spring的用户登录拦截器,确实省去了程序员不少的精力,下面说说我在项目中使用的感受. 德安微信管理后台是管理多个微信帐号的平台,登录到平台的用户有三个角色,游客和微信帐号管理员.超级管理 ...

  7. (转) SpringBoot非官方教程 | 第一篇:构建第一个SpringBoot工程

    简介 spring boot 它的设计目的就是为例简化开发,开启了各种自动装配,你不想写各种配置文件,引入相关的依赖就能迅速搭建起一个web工程.它采用的是建立生产就绪的应用程序观点,优先于配置的惯例 ...

  8. 内存记号(Memory Trail)[自定义的名字] --调试方法

    即使你把输出导向到文件中,运转记录花费的时间所带来的冲击,仍然足够改变程序的执行结果.如果要改善这种情况,我必须回到一个我所谓的“Memory Trails”(内存记号)的低阶技术中.为了使用 mem ...

  9. 92. Reverse Linked List II(链表部分反转)

    Reverse a linked list from position m to n. Do it in-place and in one-pass. For example:Given 1-> ...

  10. Codeforces Round #533 (Div. 2) Solution

    A. Salem and Sticks 签. #include <bits/stdc++.h> using namespace std; #define N 1010 int n, a[N ...