本文详细介绍使用Ruby收发邮件
你可以看到reply方法已经分离了envelop和content,第5行到第9行生成了content,它包括3个header:To,From,Subject,然后在一个空行后面加上了消息内容。注意邮件主体内容之前的header之后必须有一个回车换行,即“ "”和“ ”的组合。
方法Net::SMTP.start来和MTA( mail transfer agent)建立连接,这个方法的一个参数是运行MTA的机器名称,并且使用了默认端口(25),这个方法返回一个对象用来和MTA交互,并且把这个对象作为参数传给了block(11行到13行)。使用block,能保证block结束后连接能够被关闭。
在我们的例子里,这个交互过程很简单,第12行的程序只是发送了刚才传送的邮件内容。
send_mail方法的第二个参数是使用的From地址,这是一个全局变量。第三个参数是一个包含接收者地址的数组。我们这里把这条消息发送到了两个地方,一个参数指定的to,还有一个归档所有消息的本地邮箱。
2、用POP接收和阅读邮件
使用Ruby从POP服务器接收邮件是非常简单的事情。假设我们要对人们对各种语言的喜爱程度,参加调查的人可以通过发送标题为i like xxxxx的邮件给特定的地址,xxxxx是发信者喜欢的语言的名字。清单 2的Ruby脚本用来从POP服务器接收结果并进行计算,把每种语言的喜爱者的数目存在一个普通文件,每种语言一个文件。
清单2:Fetching email with POP
1 require 'net/pop'
2
3 Net::POP3.delete_all('pop3.server.address', 110,
4 'YourAccount', 'YourPassword' ) do |email|
5 hdr = email.header
6 if hdr =~ /Subject:s+I likes+(w+)/
7 language = $1.upcase
8 else
9 language = "INVALID"
10 end
11
12 count = (File.read(language) rescue "0")
13 File.open(language, "w") {|f| f.puts old_count.succ}
14 end
POP服务器存放着用户的消息,当你读完一条消息的时候,你可以选择删除这封信,或者还把它放在服务器上存放,在我们的例子里,我们读完之后将删除它。幸运的是,Ruby提供了一个很方便的迭代器delete_all,它将一条条的取出邮件,处理完之后删掉这些信件。delete_all需要的参数有POP服务器的地址和端口(标准端口为110),还有用户名和密码。
这个方法开始之后将用指定的参数连接服务器,一封一封的取得该用户的邮件,然后每次将这封信(作为一个Net::POPMail对象)传给给定的block来处理,当block处理完这封信之后,将删除这封信。
在这个块内,第5行将这封信的所有header都取出来放到一个字符串当中。然后在第6行中用一个正则表达式在标题(Subject)中查找类似的包括的I like xxxx行,找出xxxx代表的语言,然后在12和13行中对找到的投票者选择的语言的计数进行更新。
第12行有一个很有意思的结构。每次我们得到一个给某种语言的投票,我们都用一个文件来存储这个语言得到的投票数。我们可以读取这个值,增加它,然后写回到文件。但是第一次有人给某个语言投票时,这个文件还不存在,当我们读取这个文件时会得到一个异常,很幸运Ruby提供了一个异常机制(关键字rescue),但出现异常的时候可能是因为文件不存在,所以捕获这个异常,返回一个默认值0,即这个语言的得票数为0。
另一个小技巧是第13行的old_count.succ,我们用这个来增加一个字符串。在Ruby中这是允许的,如果一个字符串包含的是一个整数,那么这个succ方法返回的是这个包含这个整数的下一个值的字符串。即aString.succ=aString.to_i.succ.to_s 。(译者注:old_count.succ可能应该是count.succ)
责编:豆豆技术应用
- Linux/Unix新闻
- Linux/Unix入门
- Linux/Unix命令
- Linux/Unix安装
- Linux/Unix编程
- Linux/Unix管理
- Linux/Unix桌面
- Linux/Unix内核
- Linux/Unix软件
- Linux/Unix发行版
- redhat/Fedora
- Ubuntu Linux
- IBM AIX
- FreeBSD
- Solaris
- NetBSD
- SCO Unix
- find基本用法
- ldd命令原理及用法例子
- su和sudo命令的区别与使用技巧
- Linux操作系统下的dd命令技巧
- 关于Top命令的参数详解
- 关于Tar命令的使用
- SSH实用技巧及常用命令使用
- Linux后台执行命令
- VI命令使用技巧集锦
- Vmstat命令列出的属性详解
- 如何查看及修改文件读写权限
- 最大可存储的单文件容量
- ext2/ext3文件系统介绍
- 常用压缩格式的压缩解压方法
- Linux系统的引导过程详细解析
- Configure参数解释说明
- Linux下硬盘和分区的命名方法
- 硬链接与软链接的区别
- 权限和所有权模型
- 存储设备的两种表示方法