>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 30055 个阅读者 刷新本主题
 * 贴子主题:  SMTP协议中常用命令的用法 回复文章 点赞(0)  收藏  
作者:flybird    发表时间:2019-09-20 11:03:36     消息  查看  搜索  好友  邮件  复制  引用

在通过Java Socket来创建一个发送邮件的客户程序时,客户程序要和SMTP服务器进行通信,采用SMTP协议。本文介绍该协议中客户端以及服务器端的各种命令的作用。

1、MAIL FROM: <发件人地址> ;向接收者标识发件人地址。

2、RCPT TO: <收件人地址> ;标识收件人地址。

3、DATA ;请求发送消息数据,每行以结尾,以一个只有“.”号的行结束。

4、QUIT ;关闭连接。

SMTP的基本命令

SMTP定义了14个命令,它们是:EHLO [ ]

MAIL FROM:

RCPT TO:

DATA

RSET

SEND FROM:

SOML FROM:

SAML FROM:

VRFY

EXPN

HELP [ ]

NOOP

QUIT

TURN

其中使得SMTP工作的基本的命令有7个,分别为:HELO﹑MAIL﹑RCPT﹑DATA﹑REST﹑NOOP和QUIT.下面分别介绍如下。

EHLO--发件方问候收件方,后面是发件人的服务器地址或标识。收件方回答OK时标识自己的身份。问候和确认过程表明两台机器可以进行通信,同时状态参量被复位,缓冲区被清空。

MAIL--这个命令用来开始传送邮件,它的后面跟随发件方邮件地址(返回邮件地址)。它也用来当邮件无法送达时,发送失败通知。为保证邮件的成功发送,发件方的地址应是被对方或中间转发方同意接受的。这个命令会清空有关的缓冲区,为新的邮件做准备。



RCPT --这个命令告诉收件方收件人的邮箱。当有多个收件人时,需要多次使用该命令,每次只能指明一个人。如果接收方服务器不同意转发这个地址的邮件,它必须报550错误代码通知发件方。如果服务器同意转发,它要更改邮件发送路径,把最开始的目的地(该服务器)换成下一个服务器。



DATA--收件方把该命令之后的数据作为发送的数据。数据被加入数据缓冲区中,以单独一行是"."的行结束数据。结束行对于接收方同时意味立即开始缓冲区内的数据传送,传送结束后清空缓冲区。如果传送接受,接收方回复OK。



REST--这个命令用来通知收件方复位,所有已存入缓冲区的收件人数据,发件人数据和待传送的数据都必须清除,接收放必须回答OK.



NOOP--这个命令不影响任何参数,只是要求接收放回答OK, 不会影响缓冲区的数据。



QUIT--SMTP要求接收放必须回答OK,然后中断传输;在收到这个命令并回答OK前,收件方不得中断连接,即使传输出现错误。发件方在发出这个命令并收到OK答复前,也不得中断连接。

下面是SMTP答复中用到的代码和含义:

500 Syntax error, command unrecognized

500 语法错误,命令无法识别



[This may include errors such as command line too long]

这种错误可能包括命令行太长等



501 Syntax error in parameters or arguments

501 语法错误在参数或论据



502 Command not implemented

502 命令不能执行



503 Bad sequence of commands

503 错误的命令次序



504 Command parameter not implemented

504 命令参数不能执行



211 System status, or system help reply

211 系统状态或系统帮助回复

214 Help message

214 帮助信息

[Information on how to use the receiver or the meaning of a

particular non-standard command; this reply is useful only to the human user]



220 Service ready

220 服务准备

221 Service closing transmission channel

221 服务关闭传输频道

421 Service not available, closing transmission channel

421 服务不可用,关闭传输频道

[This may be a reply to any command if the service knows it must shut down]

服务器即将关闭的信息

250 Requested mail action okay, completed

250 被请求的邮件完全准备好

251 User not local; will forward to

251 非本地用户,继续解析

450 Requested mail action not taken: mailbox unavailable 、

450

[E.g., mailbox busy]

550 Requested action not taken: mailbox unavailable

[E.g., mailbox not found, no access]

451 Requested action aborted: error in processing

551 User not local; please try

452 Requested action not taken: insufficient system storage

552 Requested mail action aborted: exceeded storage allocation

553 Requested action not taken: mailbox name not allowed

[E.g., mailbox syntax incorrect]

354 Start mail input; end with .

554 Transaction failed




程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->类的生命周期
  JavaWeb开发-->Web运作原理(Ⅱ)
  JSP与Hibernate开发-->域对象在持久化层的四种状态
  Java网络编程-->Java反射机制
  精通Spring-->Vue简介
  Vue3开发-->通过Axios访问服务器
  孙卫琴的视频课程的源代码下载
  18 张图弄懂面试官必问的一致性哈希
  用注解去代替if-else的技巧
  被迫重构代码,这次我干掉了 if-else
  编程语言搜索量排行:用十年数据告诉你什么最受欢迎
  java中的Static、final、Static final各种用法
  Eclipse使用指南:快速修复功能
  java 支持分词的高性能拼音转换工具,速度是 pinyin4j 的两倍
  Java 入门实用代码:从 List列表中 截取子列表
  Java入门实用代码:打印矩形
  Java入门实用代码: 方法重载
  Java入门实用代码:字符串优化测试
  Java入门实用代码:查找字符串最后一次出现的位置
  JAVA设计模式之备忘录模式原理与用法详解
  Java性能优化总结
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。