Perl 用 Socket 发送邮件详解(3)

AllCHN 2004-10-20 12:07:36
本文的前两个部分发布在:
http://community.csdn.net/Expert/topic/3473/3473313.xml?temp=.8989984
http://community.csdn.net/Expert/topic/3473/3473340.xml?temp=.867901

  对于 ISP 来说,你无法将你自己构造的模块放到 Perl 的缺省库目录,既然采用模块的方式,就有个使用方法的问题,采用无条件的 use 方法时无法使用的。
  我们需要修改环境变量,将你的模块所在的位置添加的搜索路径中去,在你的 Perl 程序的前面加上:

BEGIN {
($0 =~ m!(.*)(\\|/)[^/\\]+!) && unshift(@INC, $1);
$| = 1;
}

  然后在适当的位置加载:
  use SendMail;

  现在我们来看一个例子,看看用这个模块发送邮件有多简单,但是使用之前,你最好已经查看了模块中的 POD 内容。
#!d:/perl/bin/perl.exe

BEGIN { # get our modules directory set up
($0 =~ m!(.*)(\\|/)[^/\\]+!) && unshift(@INC, $1);
$| = 1;
}

use Socket;
use FileHandle;
use CGI;
use SendMail;

my $query = new CGI; # 创建 CGI 命名空间

$query->import_names('q'); # 获取表单参数

# 这一段用于 DOS 下的测试
# $q::smtpserver = "mail.myweb.com"; # 邮件服务器
# $q::authmail = "myname\@myweb.com"; # 验证地址
# $q::authuser = "myname"; # 验证帐号
# $q::authpass = "mypass"; # 验证密码
# $q::name = "万春"; # 发件人名称(任意)
# $q::sender = "allchn\@sohu.com"; # 发件人地址(可能需要和发件服务器吻合)
# $q::receiver = "allchn\@sohu.com"; # 收件人地址
# $q::subject = "测试Perl邮件"; # 邮件主题
# DOS 下的测试结束

SetupPreferences "-s $q::smtpserver", "-m $q::authemail", "-u $q::authuser", "-p $q::authpass", "-t text"; # , "-debug";

# 依次为: 发件人, 收件人, 邮件标题, 邮件正文
# -t 邮件格式, -s 邮件服务器, -m 验证用的邮件地址, -u 验证用户名, -p 验证用户密码(本行的内容通常省略)
# "-f 附件文件名", "-f 附件文件名", ...
# 附件文件以 -f 引导,可以放在参数的任何位置,其它任何内容如果没有省略,则前面的内容不能为空白

$msg = SendMail("'$q::name' <$q::sender>", "$q::receiver", "$q::subject", "$q::contents", "-f d:/ubb65/ubb650.nsi");
print "RETURN: $msg\n";

print "Content-type: text/html\n\n";
print qq~<HTML>
<HEAD>
<title>Perl 发送邮件</title>
<style type="text/css">
p { font-family: "宋体", "宋体"; font-size: 15px}
</style>
</HEAD>
<BODY>
<p>从 $q::name <$q::sender> 发送邮件到 $q::receiver
<p>主题: $q::subject
<p>正文: $q::contents
<p>返回信息: $msg
</BODY>
</HTML>
~;

exit 0;

  请注意被注释掉的 DOS 部分,如果你不能用 Web 来测试这个程序(随后会提供一个 HTML 文件),可以在本地安装 Perl,把 DOS 部分的注释去掉,如果你要看服务器的应答,还可以修改其下面的一行为:

SetupPreferences "-s $q::smtpserver", "-m $q::authemail", "-u $q::authuser", "-p $q::authpass", "-t text", "-debug";

  在 DOS 下运行就可以发送邮件了,如果不能成功,你可以查看服务器的返回信息找到原因。
...全文
109 2 点赞 打赏 收藏 举报
写回复
2 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
PerlExpert 2004-11-15
up
  • 打赏
  • 举报
回复
AllCHN 2004-10-20
现在来看看怎样通过服务器的 Perl 支持在浏览器里直接发送邮件。
  首先,你需要一个表单程序,这里是一个例子:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>用 Perl 发送邮件</title>
<style type="text/css">
<!--
body, p, a, td, input, textarea {
font-family: "宋体", Arial;
font-size: 9pt;
}
-->
</style>
</head>

<body>
<p align="center"><strong>Perl发送邮件</strong></p>
<blockquote>
<form name="pmail" method="post" action="http://webhost/ucgi/perlmail.pl">
<table border="1" align="center" cellpadding="4" cellspacing="0" bordercolorlight="#000000" bordercolordark="#FFFFFF" bgcolor="#CCCCCC">
<tr bgcolor="#00CCFF">
<td colspan="2"><strong>邮件信息</strong></td>
</tr>
<tr>
<td align="right">发件人名称:</td>
<td><input name="name" type="text" id="name" size="40"></td>
</tr>
<tr>
<td align="right">发件人地址:</td>
<td><input name="sender" type="text" id="sender" size="40"></td>
</tr>
<tr>
<td align="right">收件人地址:</td>
<td><input name="receiver" type="text" id="receiver" size="40"></td>
</tr>
<tr>
<td align="right">邮件主题:</td>
<td><input name="subject" type="text" id="subject" size="40"></td>
</tr>
<tr>
<td align="right">附件:</td>
<td>(固定)</td>
</tr>
<tr>
<td align="right" valign="top">邮件正文:</td>
<td><textarea name="contents" cols="40" rows="10" id="contents"></textarea></td>
</tr>
<tr bgcolor="#33CCFF">
<td colspan="2"><strong>验证信息</strong></td>
</tr>
<tr>
<td align="right">SMTP服务器:</td>
<td><input name="smtpserver" type="text" id="smtpserver" size="40"></td>
</tr>
<tr>
<td align="right">验证地址:</td>
<td><input name="authmail" type="text" id="authmail" size="40"></td>
</tr>
<tr>
<td align="right">验证帐号:</td>
<td><input name="authuser" type="text" id="authuser" size="40"></td>
</tr>
<tr>
<td align="right">帐号密码:</td>
<td><input name="authpass" type="password" id="authpass" size="40"></td>
</tr>
<tr>
<td> </td>
<td align="center"><input type="submit" name="Submit" value=" 发送邮件 "></td>
</tr>
</table>
</form>
</blockquote>
<p><strong>说明</strong>:<br>  支持SMTP验证,验证方式可以是 LOGIN 或 PLAIN,根据服务器的返回信息自动识别,支持附件(这里是发送一个固定的文件)。</p>
<p> </p>

</body>
</html>

  注意: 你需要修改 action 部分的 http://webhost/ucgi/perlmail.pl 以和你的 Perl 程序对应,将这个 HTML 文件传到服务器上,然后用浏览器打开就可以了。
  另外,在上面的 Perl 程序中,我们要求了一个附件 "-f d:/ubb65/ubb650.nsi",你必须指定一个绝对路径的文件,或者干脆删除这一个参数项(不发送附件)。多个附件可以多次使用这样的参数。
  • 打赏
  • 举报
回复
相关推荐
发帖
脚本语言
创建于2007-08-27

3.7w+

社区成员

JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
申请成为版主
帖子事件
创建了帖子
2004-10-20 12:07
社区公告

CSDN 脚本语言社区接受专栏投稿(专栏会在顶部创建专属你的栏目),投稿需满足以下要求:

  • 脚本语言技术相关;
  • 文章持续更新,保持活跃;
  • 内容清晰明了,干货为主;
  • 文章排版有序,有条有理。

本社区开通招聘专栏,发布招聘信息请联系版主,发布者需要保证招聘信息真实有效,CSDN 平台和版主不对招聘内容负责!

联系方式:私聊版主、发送邮件、QQ联系等均可: