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. 【php】---mysql---基本操作及使用---【巷子】

    1.数据库简介 (1).什么是数据库?     一个文件  一个文件夹  一个u盘   一个硬盘......都叫做数据库    存放数据的仓库   (2).常见的数据库?     mySql  sql ...

  2. linux中增加swap分区文件的步骤方法

     一.swap交换分区 Swap分区在系统的物理内存不够用的时候,把硬盘空间中的一部分空间释放出来,以供当前运行的程序使用.那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临 ...

  3. 转!!spring @component 详解 默认初始化bean的名字 VNumberTask类 就是 VNumberTask

    参考链接:信息来源 今天碰到一个问题,写了一个@Service的bean,类名大致为:CUser xml配置: <context:component-scan base-package=&quo ...

  4. kubernetes实战(五):k8s持久化安装Redis Sentinel

    1.PV创建 在nfs或者其他类型后端存储创建pv,首先创建共享目录 [root@nfs ~]# cat /etc/exports /k8s/redis-sentinel/ *(rw,sync,no_ ...

  5. 【开发者笔记】MQTT python测试笔记

    MQTT是基于订阅/发布的物联网协议. python测试需要一个发送进程和接收进程,即一个发送客户端和一个接收客户端,如果这两个客户端工作在同一个topic下,那么就能进行消息互通了. 服务器用“io ...

  6. Yarn之ResourceManager详细分析

    一.概述     本文将介绍ResourceManager在Yarn中的功能作用,从更细的粒度分析RM内部组成的各个组件功能和他们相互的交互方式. 二.ResourceManager的交互协议与基本职 ...

  7. 开启Virtualization Technology

    怎样开启Virtualization Technology功能 在Win7 或linux x64位系统里装vm,然后新建虚机安装Windows Server 2008 R2 提示一些警告,无法新建虚拟 ...

  8. 团队作业5-测试与发布(alpha阶段)

    团队作业5-测试与发布(alpha阶段) 一.测试 请根据团队项目中软件的需求文档.功能说明.系统设计和测试计划,写出软件的测试过程和测试结果,并回答下述问题. 1. 在测试过程中总共发现了多少Bug ...

  9. Python: 复数的数学运算

    写的最新的网络认证方案代码遇到了一个难题,唯一的解决办法就是使用复数空间,需要使用复数来执行一些计算操作. 复数可以用使用函数complex(real, imag) 或者是带有后缀j 的浮点数来指定. ...

  10. Putty出现 Network error:Software caused connection abort

    使用centos7.5 用Putty连接使用没多久就会出现 Network error:Software caused connection abort #修改sshd配置文件.修改3项配置即可 vi ...