`
st780206
  • 浏览: 47456 次
  • 性别: Icon_minigender_1
  • 来自: 大连
文章分类
社区版块
存档分类
最新评论

如何用Net::SMTP发送邮件

阅读更多

http://fayland.org/journal/NetSMTP.html

 

Category: Modules   Keywords: Net::SMTP mail

Code

如下代码为用163.com的SMTP来发送邮件。
#!/usr/bin/perl
use Net::SMTP;

my $mailhost = "smtp.163.com"; # the smtp host
my $mailfrom = 'notfour@163.com'; # your email address
my @mailto = ('fayland@gmail.com', 'not_four@hotmail.com'); # the recipient list
my $subject = "此为标题";
my $text = "此为正文\n第二行位于此。";

$smtp = Net::SMTP->new($mailhost, Hello => 'localhost', Timeout => 120, Debug => 1);

# anth login, type your user name and password here
$smtp->auth('user','pass');

foreach my $mailto (@mailto) {
	# Send the From and Recipient for the mail servers that require it
	$smtp->mail($mailfrom);
	$smtp->to($mailto);

	# Start the mail
	$smtp->data();

	# Send the header
	$smtp->datasend("To: $mailto\n");
	$smtp->datasend("From: $mailfrom\n");
	$smtp->datasend("Subject: $subject\n");
	$smtp->datasend("\n");

	# Send the message
	$smtp->datasend("$text\n\n");

	# Send the termination string
	$smtp->dataend();
}
$smtp->quit;

TroubleShooting/Code Analysis

  • 为什么要 $stmp->auth('user','pass');
    大部分SMTP服务器为了防止 spam /垃圾邮件,就需要用户验证身份。
    此方法需要另外安装模块:Authen::SASL, 此模块可能系统不自带。
    如果系统为虚拟主机,而此模块无法安装,可使用Socket模块进行最直接的操作。详细的代码可以参考脚本LeoBBS或书籍《Perl网络编程》。
  • Debug => 1
    此段代码用于测试之用,所以开启了Debug,一般测试一次完毕,正式使用的话会关闭它。
  • 需要注意的是发信人和收信人的地址要用单引号,或者用"fayland\@gmail.com"。如果是个变量,需要用正则先将其转换。
    $mailto =~ s/\@/\\\@/;
  • 我想发送附件,该如何做?
    参考《Perl网络编程》。

邮件发送过程的简单介绍

SMTP协议由文档rfc821定义。
在rfc821协议中定义了两个角色,即发送者(用S表示,指发送邮件的程序)和接收者(用R表示,指SMTP服务器)。
  1. 在 S 和 R 通过套接连接后,S应当先向R表明身份,此过程用helo命令完成,helo后连接发送者的域名(可用localhost)。而R的回答是一个表示连接成功的状态码和服务器身份等。例如:
    S: helo 1313s.com
    R: 220 server.com Simple Mail Transfer Service Ready
    在rfc821定义的状态码中,通常以2或3开头的表示成功,以4或5开头的表示传输过程出现了问题。
    如果是需要服务器身份验证的话,还用发送AUTH LOGIN。
  2. 发送头文件。
    S: MAIL FROM: 
    R: 250 OK
    S: RCPT TO: 
    R: 
    这里的recipient的地址如果是在SMTP同一服务器上且服务器找不到此地址,就会回答"550 No such user here"。
  3. 发送正文。以DATA开始。以两个换行结束。
    S: DATA
    R: 354 Start mail input; end with (两个换行)
    S: To: recipient@whereau.com
    S: From: someone@somewhere.com
    S: subject: title
    S: ...
    S: text
    S: etc.
    S:
    S:
    R: 250 OK
  4. 退出连接。
    S: QUIT
    R: 221 server.com Service closing transmission channel

以上就是简易的连接过程。当开启Net::SMTP的debug的时候,就会输出类似于此连接过程的东西。
分享到:
评论

相关推荐

    易语言SMTP邮件发送

    易语言SMTP邮件发送源码,SMTP邮件发送,发送

    C语言socket/smtp发送邮件,支持附件,支持windows和linux

    * 可以发送带附件的邮件,附件大小限制由发送方服务器而定,暂未测试具体为多少MB * 附件可以是多个 * 邮件内容和主题可以是空,但当有附件时,主题取第一个附件的文件名(不含扩展名) * 密码验证均为base64加密 * ...

    发送邮件发送,先提一下SMTP

    //接着利用sina的SMTP来发送邮件,需要使用Microsoft .NET Framework SDK v1.1和它以上的版本 //基本权限 objMailMessage.Fields.Add("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate", "1...

    SMTP发送邮件脚本

    SMTP发送邮件脚本,采用VBS编写,只能发送内容,不能发送附件

    在Ruby中利用Net::SMTP类发送电子邮件的教程

    主要介绍了在Ruby中利用Net::SMTP类发送电子邮件的教程,包括类中所带方法的用法介绍,需要的朋友可以参考下

    SMTP测试邮件发送工具

    SMTP测试工具,简单快捷,测试电脑是否能够发送邮件。

    基于smtp的邮件发送程序的设计与实现

    基于smtp的邮件发送程序的设计与实现,实现邮件发送和附件发送,vc++6.0环境源代码。

    SMTP 邮件发送模块(源码)

    SMTP 邮件发送模块(源码) SMTP 邮件发送模块(源码) SMTP 邮件发送模块(源码) SMTP 邮件发送模块(源码)

    SMTP发送邮件程序(支持SSL和TLS)

    SMTP发送邮件,支持SSL和TLS 核心程序可以跨平台,UTF-8,base64编码,可发送附件 界面用MFC写的,只是方便测试

    c#实现SMTP发送邮件功能

    c#实现SMTP发送邮件功能,可以发送,抄送给多人,并可以发送附件。

    终端邮件发送工具(通过SMTP帐号)SendmailViaSMTP.zip

    SendmailViaSMTP 是一个在终端中通过 SMTP 帐号来发送邮件的工具。目前主要功能:命令行下通过smtp帐号发送邮件可以接收管道信息为邮件正文tls支持;gmail邮件帐号支持。批量任务首选,服务器端配合脚本使用效果更佳...

    C# SMTP 发送邮件

    C# SMTP 发送邮件 测试了:163邮件,Gmail邮件,Hotmail邮件

    基于SMTP协议的邮件发送客户端程序设计说明书

    通过对“基于SMTP协议的邮件发送客户端程序”的系统分析、系统设计、编码、调试等工作的实践,了解基于TCP/IP协议的网络编程的一般设计和实现思路,熟悉和掌握软件设计和实现的一般方法,深入了解邮件传输协议的基本...

    PHP通过SMTP实现发送邮件

    这个是PHP通过SMTP发送邮件类,很好用的。配置好邮件服务器的相关信息,即可成功发送邮件。已经通过测试,可以试下。

    SMTP发送邮件.docx

    基于JAVA实现SMTP发送邮件 使用了socket套接字的方式实现邮件的发送,能够完美运行

    PHP用SMTP发送邮件示例

    PHP利用SMTP发送邮件,代码亲自测试可以正常发关接收邮件

    C#阿里云发送SMTP邮件失败

    今天在测试邮件功能的时候,发现明明在本地发邮件功能可以正常使用的,但是放到了阿里云服务器上,就发送失败。报错信息如下:System.Net.WebException: 无法连接到远程服务器 ---> System.Net.Sockets....

    基于邮件交换(MX)与SMTP协议发送邮件

    基于邮件交换(MX)与SMTP协议发送邮件,可以无须SMTP服务器中转直接将E-Mail电子邮件发送到对方邮箱,代码中提供了网卡信息获取类,可以获取本机IP地址、子网掩码、DNS、Wins、网卡MAC地址等相关信息;还提供了SMTP协议...

    java smtp发送邮件

    java发送邮件的demo 大部分代码行上都有添加注释 很容易就能嵌入自己的系统

    C# SMTP 匿名发送邮件解决方案

    前段时间公司有项目需要使用C#的SMTP 发邮件功能,在网上搜索了下,网上没有一个完整的解决方案,都是东说语句西说一句,几乎扯淡,对于我们这些伟大的程序员来说,就是完整的解决版本,所以直接上代码是最现实。...

Global site tag (gtag.js) - Google Analytics