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

  注意:你可以指定多个发送的地址,但需要使用逗号隔开。(编辑:雷林鹏 来源:网络)

转载于:https://www.cnblogs.com/pengpeng1208/p/10137072.html

雷林鹏分享:Ruby 发送邮件 - SMATP相关推荐

  1. 雷林鹏分享:Ruby XML, XSLT 和 XPath 教程

    Ruby XML, XSLT 和 XPath 教程 什么是 XML ? XML 指可扩展标记语言(eXtensible Markup Language). 可扩展标记语言,标准通用标记语言的子集,一种 ...

  2. 雷林鹏分享:Ruby Web Services 应用 - SOAP4R

    Ruby Web Services 应用 - SOAP4R 什么是 SOAP? 简单对象访问协议(SOAP,全写为Simple Object Access Protocol)是交换数据的一种协议规范. ...

  3. 雷林鹏分享:Ruby 字符串(String)

    Ruby 字符串(String) Ruby 中的 String 对象存储并操作一个或多个字节的任意序列,通常表示那些代表人类语言的字符. 最简单的字符串是括在单引号(单引号字符)内.在引号标记内的文本 ...

  4. 雷林鹏分享:Ruby 正则表达式

    Ruby 正则表达式 正则表达式是一种特殊序列的字符,它通过使用有专门语法的模式来匹配或查找其他字符串或字符串集合. 语法 正则表达式从字面上看是一种介于斜杠之间或介于跟在 %r 后的任意分隔符之间的 ...

  5. 雷林鹏分享:Redis 管道技术

    Redis是一种基于客户端-服务端模型以及请求/响应协议的TCP服务.这意味着通常情况下一个请求会遵循以下步骤: 客户端向服务端发送一个查询请求,并监听Socket返回,通常是以阻塞模式,等待服务端响 ...

  6. 雷林鹏分享:Lua 面向对象

    面向对象编程(Object Oriented Programming,OOP)是一种非常流行的计算机编程架构. 以下几种编程语言都支持面向对象编程: C++ Java Objective-C Smal ...

  7. 雷林鹏分享:PHP Secure E-mails

    在上一节中的 PHP e-mail 脚本中,存在着一个漏洞. PHP E-mail 注入 首先,请看上一章中的 PHP 代码: if (isset($_REQUEST['email'])) { // ...

  8. 雷林鹏分享:jQuery EasyUI 数据网格 - 创建属性网格

    jQuery EasyUI 数据网格 - 创建属性网格 属性网格(property grid)带有一个内置的 expand(展开)/collapse(合并) 按钮,可以简单地为行分组.您可以简单地创建 ...

  9. 雷林鹏分享:MySQL 及 SQL 注入

    MySQL 及 SQL 注入 如果您通过网页获取用户输入的数据并将其插入一个MySQL数据库,那么就有可能发生SQL注入安全的问题. 本章节将为大家介绍如何防止SQL注入,并通过脚本来过滤SQL中注入 ...

  10. 雷林鹏分享:PHP 简介

    PHP 是服务器端脚本语言. 您应当具备的基础知识 在继续学习之前,您需要对以下知识有基本的了解: HTML CSS 如果您希望首先学习这些项目,请在我们的 首页 访问这些教程. PHP 是什么? P ...

最新文章

  1. 浅谈我对DDD领域驱动设计的理解
  2. 基于Linux 的VM TOOLS Install
  3. hbase操作,创建命名空间,创建hbase表,添加数据,删除数据,通过RowKey获取数据,扫描数据,获取所有的表,获取ColumnFamily,删除表,获取hbase命名空间
  4. flask中的CBV和FBV
  5. 中年失业都去做什么_2020年失业是种什么体验?这位吉他手去做了外卖小哥,演出时还穿着工作服...
  6. 收集 | 方便实用的在线网站
  7. 央行允许银行倒闭破产,那么储户的存款怎么办?
  8. leetcode851. 喧闹和富有(dfs)
  9. hadoop jar
  10. 国内大厂在移动端跨平台的框架接入分析
  11. 单片机如何在一数据包前加标识呢_单挑Google面试官,一上来就问我Chrome底层原理和HTTP协议(万字长文)...
  12. 拓端tecdat|R语言使用 LOWESS技术图分析逻辑回归中的函数形式
  13. http://www.boobooke.com/bbs/thread-10284-1-1.html
  14. html跳转网页为什么网页无法访问,如何解决网络正常网页无法打开的问题?
  15. Android本地默认IP
  16. Java随机产生昵称
  17. Python爬虫实战 | (16) 破解简书登录点触验证码
  18. 某二级支行网络的设计与实现
  19. 个人对于po、bo、vo的理解
  20. Virus total爬虫分享

热门文章

  1. 「代码随想录」96.不同的二叉搜索树【动态规划】详解!
  2. 「leetcode」452. 用最少数量的箭引爆气球【贪心算法】详细图解
  3. 「leetcode」454.四数相加II:其实需要哈希的地方都能找到map的身影
  4. 如何在 Mac 上使用“隔空投送”?
  5. 如何使用 Pages 在 iPhone、iPad 或 Mac 上插入和编辑表格?
  6. Tuxera NTFS 2021 for Mac(NTFS磁盘格式读写工具)
  7. Money Pro for Mac如何导入账单?
  8. UCloud可支撑单可用区320,000服务器的数据中心网络系统设计
  9. php windows环境 安装 Apache-apollo + phpMQTT 实现发送 MQTT
  10. ubuntu 的重要一课