本文将讨论开发人员利用Perl特定的能力编写POP3电子邮件应用程序。
像微软的Outlook和Mozilla的雷鸟(Thunderbird)这样的电子邮件客户端程序能够让收发电子邮件变得极其简单——绝大多数时候,你需要做的只不过是点击一下工具条上的按钮,软件会为你完成与电子邮件服务器进行通信、验证密码、收取电子邮件等复杂的工作。
但是在这种具有欺骗性的简单表象背后却牵涉大量的软件编程工作。而且,如果你是一个软件开发人员,你可能有一天会发现如果能够把这样的程序放到自己的应用程序会有多好啊。
不用担心那么多,因为如果你在使用Perl,那么你就可以利用一个叫做Net::POP3的小CPAN模块来实现这一愿望,这个十分有用的模块会为你完成大多数复杂的工作。这个模块向POP3服务器的交互操作公开一个简单但是非常强大的API,提供一些预设的方法来进行服务器身份验证、消息列表和收取、消息删除,以及结束会话——简而言之,它提供了满足用户基本需要的一切。
注:列表A到C里的代码文本可以从可下载的Zip文件里获得。
本文将通过使用Net::POP开发一个简单的POP3电子邮件应用程序来探讨它的一些功能。一开始你需要在Perl提示符下运行下面的命令来下载和安装这个模块(如果你还没有的话):
perl> perl -MCPAN -e "install Net::POP3"
开始创建下面的Perl脚本(列表A):
列表A
#!/bin/perl
# import package
use Net::POP3;
# ask user for critical variables
print "Mail host: ";
$host =
chomp($host);
print " ";
print "Mailbox username: ";
$user =
chomp($user);
print " ";
print "Mailbox password: ";
$pass =
chomp($pass);
# initiate connection
# default timeout = 120 sec
$conn = Net::POP3->new($host) or die("ERROR: Unable to connect. ");
# login
$numMsg = $conn->login($user, $pass) or die("ERROR: Unable to login. ");
# display number of messages
if ($numMsg > 0) {
print "Mailbox has $numMsg message(s). ";
} else {
print "Mailbox is empty. ";
}
# close connection
$conn->quit();
这个代码段会要求用户输入三个内容:电子邮件服务器的主机名、POP3用户名和相应的密码。一旦输入了这三项内容,一个新的Net::POP3对象就会被创建,而对象的login()方法会被用来打开一个到主机的连接,并验证所提供的凭据。如果提供的凭据被服务器认可,那么login()方法就会返回邮箱里的消息数量(或者返回0,如果没有消息的话)。
下面就是它的一个实际例子:
Mail host: pop.mailbox.com
Mailbox username: jane
Mailbox password: secret
Mailbox has 77 message(s).
当然,仅仅知道消息的数量是远远不够的——你肯定希望知道这些消息的内容。通过Net::POP3的top()方法就能够达到这个目的,它会扫描消息的前X行,并返回一个指向含有已收取数据的数组的参考。下面就是一个例子,(列表B)会取回邮箱里所有消息的前20行:
列表B
#!/bin/perl
# import package
use Net::POP3;
# ask user for critical variables
print "Mail host: ";
$host =
chomp($host);
print " ";
print "Mailbox username: ";
$user =
chomp($user);
print " ";
print "Mailbox password: ";
$pass =
chomp($pass);
# initiate connection
# default timeout = 120 sec
$conn = Net::POP3->new($host) or die("ERROR: Unable to connect. ");
# login
$numMsg = $conn->login($user, $pass) or die("ERROR: Unable to login. ");
# get message numbers
# iterate over list and print first 20 lines of each
if ($numMsg > 0) {
$msgList = $conn->list();
foreach $msg (keys(%$msgList)) {
$ref = $conn->top($msg, 20);
print @$ref;
print " ";
}
} else {
print "Mailbox is empty. ";
}
# close connection
$conn->quit();
你可以使用get()方法而不用top()方法,从而收取完整的消息。
如果你希望的话,你可以在命令行通过Getopt::Long模块把服务器的参数传递给程序,下面的列表C显示了这个模块:
列表C
#!/bin/perl
# import packages
use Net::POP3;
use Getopt::Long;
# read command line options
# display usage message in case of error
GetOptions ('h|host=s' => $host,
'u|user=s' => $user,
'p|pass=s' => $pass) or die("Input error. Try calling me with: -h
# initiate connection
# default timeout = 120 sec
$conn = Net::POP3->new($host) or die("ERROR: Unable to connect. ");
# login
$numMsg = $conn->login($user, $pass) or die("ERROR: Unable to login. ");
# get message numbers
# iterate over list and print first 20 lines of each
if ($numMsg > 0) {
$msgList = $conn->list();
foreach $msg (keys(%$msgList)) {
$ref = $conn->top($msg, 20);
print @$ref;
print " ";
}
} else {
print "Mailbox is empty. ";
}
# close connection
$conn->quit();
这些代码模板会告诉你如何把Net::POP3集成到需要处理电子邮件的应用程序里。自己动手试试吧,祝你编程愉快!
自由广告区 |
分类导航 |
邮件新闻资讯: IT业界 | 邮件服务器 | 邮件趣闻 | 移动电邮 电子邮箱 | 反垃圾邮件|邮件客户端|网络安全 行业数据 | 邮件人物 | 网站公告 | 行业法规 网络技术: 邮件原理 | 网络协议 | 网络管理 | 传输介质 线路接入 | 路由接口 | 邮件存储 | 华为3Com CISCO技术 | 网络与服务器硬件 操作系统: Windows 9X | Linux&Uinx | Windows NT Windows Vista | FreeBSD | 其它操作系统 邮件服务器: 程序与开发 | Exchange | Qmail | Postfix Sendmail | MDaemon | Domino | Foxmail KerioMail | JavaMail | Winwebmail |James Merak&VisNetic | CMailServer | WinMail 金笛邮件系统 | 其它 | 反垃圾邮件: 综述| 客户端反垃圾邮件|服务器端反垃圾邮件 邮件客户端软件: Outlook | Foxmail | DreamMail| KooMail The bat | 雷鸟 | Eudora |Becky! |Pegasus IncrediMail |其它 电子邮箱: 个人邮箱 | 企业邮箱 |Gmail 移动电子邮件:服务器 | 客户端 | 技术前沿 邮件网络安全: 软件漏洞 | 安全知识 | 病毒公告 |防火墙 攻防技术 | 病毒查杀| ISA | 数字签名 邮件营销: Email营销 | 网络营销 | 营销技巧 |营销案例 邮件人才:招聘 | 职场 | 培训 | 指南 | 职场 解决方案: 邮件系统|反垃圾邮件 |安全 |移动电邮 |招标 产品评测: 邮件系统 |反垃圾邮件 |邮箱 |安全 |客户端 |