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 下运行就可以发送邮件了,如果不能成功,你可以查看服务器的返回信息找到原因。
...全文
170 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
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",你必须指定一个绝对路径的文件,或者干脆删除这一个参数项(不发送附件)。多个附件可以多次使用这样的参数。
内容概要:本报告基于寻汇与万事达卡在2026年联合发布的《超越自动化:定义智能体驱动的全球支付》白皮书,系统分析了AI智能体在B2B跨境支付领域的应用与发展。报告指出,传统跨境支付存在效率低、人工干预多、合规风险高等问题,当前正从数字化、数据化迈向“自主化”新阶段。AI智能体可在授权下自主完成支付、换汇、合规审核、对账等全流程操作,核心技术包括深度强化学习、自然语言处理和图神经网络,用于路径优化、合规解析与异常检测。报告揭示了决策可解释性不足、跨系统协同标准缺失、安全审计机制缺位三大研究空白,并探讨了法律责任归属、监管碎片化、数据主权与技术可靠性四大现实挑战。寻汇与万事达卡的合作构建了“智能体编排引擎”与全球合规决策网络,首次提出L0-L5的智能体自主化等级框架,推动行业标准化。预计2026至2027年将实现首批大规模商业部署,提升支付效率超30%。; 适合人群:金融科技研究人员、AI技术开发者、跨境支付行业从业者、企业财资管理人员及政策监管机构相关人员。; 使用场景及目标:①理解AI智能体在跨境支付中的技术架构与应用场景;②把握自主化支付的演进趋势与商业化前景;③为金融机构和技术公司布局AI驱动型支付系统提供战略参考;④助力监管机构制定适应智能体时代的合规框架。; 阅读建议:本报告兼具技术深度与产业视野,建议结合白皮书原文及相关技术文献对照研读,重点关注智能体决策逻辑、合规实现机制与跨系统集成方案,并关注后续试点项目的实际成效与监管反馈。

37,738

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧