`
winebibber
  • 浏览: 119513 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

SMTP学习

阅读更多

     SMTP被用来在因特网上传递电子邮件,RFC821规定了该协议的所有细节,但是你只须记住该协议的基本命令和方法就行了。协议的原理很简单,无非是一个客户端计算机向服务器发送命令,然后服务器向客户端计算机返回一些信息。客户端发送的命令以及服务器的回应都是字符串,所以不需要特别的软件就能读出它们。SMTP协议共包含10个SMTP命令,列表如下:

SMTP命令命令说明
HELLO<domain><CRLF>识别发送方到接收SMTP的一个HELLO命令
MAILFROM:<reverse-path><CRLF><reverse-path>为发送者地址。此命令告诉接收方一个新邮件发送的开始,并对所有的状态和缓冲区进行初始化。此命令开始一个邮件传输处理,最终完成将邮件数据传送到一个或多个邮箱中。
RCPTTO:<forward-path><CRLF><forward-path>标识各个邮件接收者的地址
DATA<CRLF>
接收SMTP将把其后的行为看作邮件数据去处理,以<CRLF>.<CRLF>标识数据的结尾。
REST<CRLF>退出/复位当前的邮件传输
NOOP<CRLF>要求接收SMTP仅做OK应答。(用于测试)
QUIT<CRLF>要求接收SMTP返回一个OK应答并关闭传输。
VRFY<string><CRLF>验证指定的邮箱是否存在,由于安全因素,服务器多禁止此命令。
EXPN<string><CRLF>验证给定的邮箱列表是否存在,扩充邮箱列表,也常禁止使用。
HELP<CRLF>查询服务器支持什么命令

注:<CRLF>为回车、换行,ASCII码分别为13、10(十进制)。

   SMTP协议的每一个命令都会返回一个应答码,应答码的每一个数字都是有特定含义的,如第一位数字为2时表示命令成功;为5表失败;3表没有完成。一些 较复杂的邮件程序利用该特点,首先检查应答码的首数字,并根据其值来决定下一步的动作。下面将SMTP的应答码列表如下:

应答码说明
501参数格式错误
502命令不可实现
503错误的命令序列
504命令参数不可实现
211系统状态或系统帮助响应
214帮助信息
220<domain>服务就绪
221<domain>服务关闭
421<domain>服务未就绪,关闭传输信道
250要求的邮件操作完成
251用户非本地,将转发向<forward-path>
450要求的邮件操作未完成,邮箱不可用
550要求的邮件操作未完成,邮箱不可用
451放弃要求的操作;处理过程中出错
551用户非本地,请尝试<forward-path>
452系统存储不足,要求的操作未执行
552过量的存储分配,要求的操作未执行
553邮箱名不可用,要求的操作未执行
354开始邮件输入,以"."结束
554操作失败

示例:
telnet 172.16.10.250  25 --------------------使用 telnet 命令连接服务器 25 端口
Trying 172.16.10.250 ... ---------------------正在连接服务器 25 端口
Connected to 172.16.10.250 . -------------连接服务器 25 端口成功
helo askcuix ----------------------------------- 向服务器标识用户身份,该命令包含一个参数,即你的邮箱名。在RFC821中,HELO是一个可选择性命令,如果服务器不要求该命令的话,你可以把它忽略掉。
250 askcuix
mail from: <askcuix@domain.com> --------用mail from命令告诉服务器你想发一封邮件,该命令以发信人的邮件地址为参数。
250 ok -------------------------------------------命令执行成功
rcpt to: <test@domain.com> ----------------该命令以收信人地址为参数,告诉服务器你想将邮件发到收信人地址处。如果你想将邮件发给多个收件人的话。你需要多次使用RCPTTO命令,对每个命令,服务器都会返回代码为250的回应。
250 ok -------------------------------------------命令执行成功
data --------------------------------------------- 数据传输初始化。用DATA命令告诉服务器以下的内容为邮件正文。在你从服务器收到代码为354的回应后,你就可以发送邮件正文了。
354 go ahead --------------------------------- 开始传输数据。邮件按行发送,每行邮件以一个无回车的换行符结束。
From: askcuix@domain.com
To: test@domain.com
Date: Mon, 25 May 2008 14:24:27 +0800
Subject: test mail

Hi, test
This is a test mail, you don't reply it.

.
----------------------------------------------------数据内容,包括BASE64加密后的邮件内容, 以 CRLF.CRLF 结束数据传输。服务器收到这个标志后,就会立即向你返回一个代码为250的回应以及该邮件的唯一ID号。
250 ok message accepted for delivery ----命令执行成功
quit ---------------------------------------------- 结束会话,也可以继续发下一封邮件。
221 Ok,close
Connection closed by foreign host .-------- 断开连接

分享到:
评论

相关推荐

    POP&SMTP 学习笔记

    POP&SMTP 学习笔记 MIME TYPE rfc1939--POP3 RFC2045( Mutipurpose Internet Mail Extensions(MIME) Part One telnet操作 smtp pop

    smtp.rar_pcap_smtp_smtp pcap_smtp数据包_抓取smtp数据包

    SMTP(Simple Mail Transfer Protocol)是互联网上用于发送电子邮件的标准协议。在这个名为"smtp.rar_pcap_smtp_smtp pcap_...通过学习如何解析和分析这种类型的文件,可以提升我们在网络管理和故障排除方面的技能。

    smtp.cpp.rar_SMTP客户端_smtp

    通过阅读和理解这段代码,开发者可以学习如何在自己的项目中集成SMTP邮件发送功能。 此外,如果代码设计良好,还可能会有示例或测试用例,展示如何使用这个SMTP客户端类来发送一封简单的邮件。这将帮助初学者更好地...

    smtp邮件发送程序

    总的来说,SMTP邮件发送程序的学习能够帮助我们掌握互联网上的邮件通信机制,通过编程实现自动化邮件发送功能,这对于日常办公、系统通知、自动化任务等方面都有着广泛的应用。通过实践和研究提供的资源,你将能够更...

    smtp.rar_SMTP代码_SMTP服务器_java smtp_smtp

    SMTP(Simple Mail Transfer Protocol)是互联网上用于发送电子邮件的标准协议,它定义了邮件服务器之间...通过深入学习和实践,不仅可以理解SMTP协议的基本运作,还能掌握使用JavaMail API构建SMTP服务器的核心技术。

    SMTP协议的简单应用

    初学者可以参考这些代码来学习如何将用户界面的输入与SMTP发送邮件的逻辑相结合。程序可能会使用Windows Forms库来创建窗体,通过TextBox控件获取用户输入,Button控件触发发送事件,以及OpenFileDialog控件帮助用户...

    java socket实现smtp发送邮件,支持SSL

    Java Socket 实现 SMTP 发送邮件是一项常见的编程任务,尤其在自动化通知、系统间通信或用户交互中非常有用。SMTP(Simple Mail ...在SocketSmtp这个示例项目中,应该包含了实现这一功能的具体代码,可以参考学习。

    SMTP邮件发送程序

    SMTP(Simple Mail Transfer Protocol)邮件发送...通过分析这些文件,开发者可以学习到SMTP协议的实现,Base64编码技术,以及如何在C++环境中编写邮件客户端程序。同时,这也提醒我们注意网络安全,避免滥用此类技术。

    smtp.rar_ PHP SMTP_php smtp_smtp_smtp php

    这份"smtp.rar"压缩包包含了关于PHP如何与SMTP服务器交互的相关资源,对于学习和理解这一过程非常有用。 首先,我们来详细解释PHP通过SMTP发送邮件的基本原理。SMTP协议规定了邮件的传输方式,包括验证、命令交换和...

    基于SMTP的邮件收发系统

    SMTP(Simple Mail Transfer Protocol)是互联网上用于在邮件服务器之间传输电子邮件的标准协议。...提供的压缩包文件可能包含实现SMTP邮件系统的源代码,这将是一个学习和研究SMTP协议的宝贵资源。

    smtp.rar_csharp smtp_smtp_smtp csharp

    学习和理解这个示例可以帮助你更好地在实际项目中使用SMTP协议发送电子邮件。 总的来说,C#与SMTP结合可以方便地实现电子邮件的发送,这对于许多业务应用和自动化任务都是非常有用的。通过深入理解SMTP协议的工作...

    C# SMTP 发送邮件

    通过学习和理解这些代码,你可以更深入地掌握C#通过SMTP发送邮件的技术,并应用于实际项目中。 总之,C#结合SMTP协议提供了一种简单且强大的方式来发送电子邮件,支持多种邮箱服务。理解并掌握这一技术,对于开发...

    smtp 邮件发送客户端

    通过这个项目,你可以学习到如何将MFC的Socket功能应用于实际应用中,理解SMTP协议的工作原理,并且掌握构建SMTP客户端的基本步骤。这对于开发自己的邮件应用或者进行网络通信编程都是非常有价值的实践经验。

    一个SMTP服务器实现程序

    在提供的压缩包文件“VC”中,可能包含了该项目的源代码、工程文件和其他资源,用户可以查看这些文件来学习如何使用MFC实现SMTP客户端的具体细节。通过研究这个程序,你可以了解网络编程、邮件协议以及如何利用MFC...

    网络课程设计 smtp

    通过这个网络课程设计,学生将深入理解SMTP协议的工作流程,学习如何使用MFC类库进行网络编程,同时也能锻炼到实际问题的解决能力。通过实践,他们将更好地掌握邮件传输的机制,并能开发出自己的邮件发送程序,这...

    SMTP协议实现总集.asp

    学习和实践SMTP协议实现不仅有助于理解邮件发送的底层机制,还可以帮助开发者创建自定义的邮件通知系统,例如用于网站注册确认、订单通知、密码重置等业务场景。同时,理解SMTP协议也能为处理更复杂的邮件服务,如...

    smtpserver

    SMTP(Simple Mail Transfer Protocol)是互联网上用于发送电子邮件的标准协议。SMTP服务器是执行这个协议的软件,它负责...通过学习和实践,可以有效保障邮件服务的稳定性和安全性,同时防止滥用和垃圾邮件的传播。

    php_smtp.rar_hotmail smtp php_php smtp hotmail_php 邮件_smtp_smtp_

    标题中的"php_smtp.rar_hotmail smtp php_php smtp hotmail_php 邮件_smtp_smtp_"表明这个压缩包包含的是关于PHP通过SMTP协议发送邮件的...同时,通过阅读和调试test.php,你可以学习如何在实际项目中集成这个SMTP类。

    smtp sample

    在"smtp sample"中,通过阅读和分析代码,我们可以学习到如何正确配置和使用SMTP API,这对于开发和维护涉及邮件功能的应用程序至关重要。同时,了解相关的最佳实践和潜在问题,能够帮助我们编写出更健壮的邮件发送...

    一个可以参考的smtp客户端代码

    总结来说,这个资源提供了学习和实践SMTP邮件发送的一个起点,对于那些想要开发邮件功能的程序员来说,这是一个有价值的参考。通过研究这个客户端代码,可以深入了解SMTP协议的工作原理,以及如何在实际编程中实现...

Global site tag (gtag.js) - Google Analytics