`
st780206
  • 浏览: 47887 次
  • 性别: 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服务器成功发送邮件的应用程序。这样的工具对于排查邮件发送问题、配置验证以及诊断网络连接问题非常有用。 SMTP测试邮件发送工具的核心功能包括: 1. **服务器配置...

    C++ SMTP发送邮件

    4. **发送邮件**:使用SMTP命令“MAIL FROM:”指定发件人地址,“RCPT TO:”指定收件人地址,然后使用“DATA”命令发送邮件头和正文。完成后,发送“.”作为数据结束标记。 5. **断开连接**:发送“QUIT”命令以...

    c++ 使用SMTP 发送 QQ邮件。

    在C++中,实现SMTP发送邮件通常需要一个库来处理网络通信和SMTP协议细节。在这个案例中,文件名"CSMTP_SSL"可能是一个C++库,用于支持SSL/TLS加密的安全SMTP通信。SSL(Secure Sockets Layer)和其继任者TLS...

    使用PHP通过SMTP发送邮件

    【使用PHP通过SMTP发送邮件】知识点详解 在PHP中,虽然内置了`mail()`函数用于发送邮件,但由于其灵活性不足,且不支持SMTP验证,在某些情况下可能无法正常工作,因此对于需要更高级功能的场景,如SMTP验证或通过...

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

    SMTP会话启动后,可以使用`send_message`方法发送邮件。它需要三个参数:邮件内容、发件人地址和收件人地址。例如: ```ruby message = "From: me@fromdomain.com\nTo: test@todomain.com\nSubject: Test\n\nThis...

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

    当用户想要发送邮件时,客户端应用会与SMTP服务器建立连接,然后按照SMTP协议的命令交互,如HELO(你好)、MAIL FROM(发件人)、RCPT TO(收件人)、DATA(邮件数据)等,最后用`.`作为邮件内容的结束标志。...

    java smtp发送邮件

    Java SMTP 发送邮件是Java开发中常见的功能,用于在应用程序中...总的来说,Java SMTP发送邮件涉及JavaMail API的使用,SMTP服务器的配置,以及邮件内容的构建。理解这些知识点,就能轻松地在Java项目中实现邮件功能。

    易语言SMTP邮件发送

    发送邮件时,需要与SMTP服务器建立TCP连接,然后按照规定的命令序列进行交互,如HELO/EHLO、AUTH、MAIL FROM、RCPT TO、DATA和QUIT等。 2. **网络通信模块**:易语言提供了“网络”类库,包含了TCP/IP通信的基本...

    SMTP邮件发送.rar

    当用户通过电子邮件客户端发送邮件时,SMTP客户端(易语言源码中实现的部分)会与SMTP服务器建立连接,然后按照以下步骤进行通信: 1.1. 连接:发件人的SMTP客户端连接到SMTP服务器,通常使用TCP端口25。 1.2. ...

    Java Socket 实现SMTP邮件发送,支持SSL/TSL

    而Java Socket库则提供了实现SMTP客户端所需的基本功能,允许我们创建连接到SMTP服务器的套接字,并通过这个连接发送邮件。以下是一些关键知识点: 1. **Java Socket类**:Java的`java.net.Socket`类是网络通信的...

    SMTP 邮件发送模块(源码)

    在编程领域,开发SMTP邮件发送模块是为了实现程序自动发送邮件的功能,广泛应用于通知、提醒、报告等场景。这个源码可能是用VC(Visual C++)编写的,适合Windows平台的应用程序开发。 在SMTP邮件发送过程中,主要...

    易语言SMTP邮件发送源码

    - 发送邮件头部:发送包含发件人、收件人、主题等信息的邮件头部。 - 发送邮件正文:将邮件内容以ASCII或MIME格式发送。 - 断开连接:发送完邮件后,关闭与SMTP服务器的连接。 6. **错误处理**:源码中应包含...

    C#使用163的SMTP服务器发送邮件.docx

    C# 使用 163 的 SMTP 服务器发送邮件 在本文中,我们将介绍如何使用 C# 语言通过 163 的 SMTP 服务器发送邮件。首先,我们需要了解 System.Net.Mail.SmtpClient 类,它是 C# 中专门用来请求 SMTP 服务器发送邮件的...

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

    2. **发送邮件功能**:用户应能输入收件人和抄送人的邮箱地址,设定邮件主题和内容,并有添加附件的功能。 3. **交互信息展示**:客户端需实时显示邮件发送过程中的命令和参数,以便用户了解邮件传输状态。 在界面...

    c#实现SMTP发送邮件功能

    ### C# 实现 SMTP 发送邮件功能 ...通过以上步骤,我们已经成功实现了使用 C# 语言结合 SMTP 协议发送邮件的功能。这项技术对于构建自动化任务、用户通知等功能具有重要意义。希望本文能对你有所帮助。

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

    ##### (一)利用知名邮件服务提供商的SMTP发送邮件 为了使用知名邮件服务提供商的SMTP服务,例如新浪、搜狐、网易等,你需要在其官方网站上注册一个免费邮箱账号,并使用该邮箱账户进行身份验证。这有助于避免大量...

    PHP用SMTP发送邮件示例

    在本示例中,我们将探讨如何使用PHP通过SMTP发送邮件。 首先,我们来看`email.class.php`文件。这个文件通常包含一个PHP类,用于封装邮件发送的功能。这个类可能会有一个构造函数,用来设置SMTP服务器的地址、端口...

    易语言源码易语言SMTP邮件发送源码.rar

    SMTP(Simple Mail Transfer Protocol)是互联网上用于发送电子邮件的标准协议,易语言通过实现SMTP功能,可以让用户编写程序来发送邮件。 这篇"易语言源码易语言SMTP邮件发送源码"提供了在易语言环境下实现SMTP...

    ios smtp 发送邮件

    描述中提到了一个sample,这可能是一个简单的示例项目,演示如何集成和使用SMTP发送邮件。在这个名为"MailComposer"的子文件中,可能包含了实现邮件发送的主要代码。通常,这样的示例会包含以下步骤: 1. **安装库*...

    perl 写的发邮件smtp

    以上就是使用Perl通过SMTP发送邮件的基本过程。通过这种方式,你可以创建自动化报告、通知或者任何需要通过邮件发送的信息。如果你在处理过程中遇到问题,例如服务器连接问题、认证错误等,通常需要检查网络设置、...

Global site tag (gtag.js) - Google Analytics