注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

曾国藩的博客

 
 
 

日志

 
 

图解使用Telnet程序手工发送邮件  

2012-04-12 17:13:11|  分类: 网络/系统架构/版 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
http://haolloyin.blog.51cto.com/1177454/351256

我们都习惯了用邮件客户端软件或者登录到电子邮件站点进行收发邮件,现在尝试一下使用 Windows 自带的 Telnet 程序手工地发送一封简单的邮件,以此来稍微明白关于邮件发送的一些知识。

现在 E-mail 的传输一般都使用了 ESMTP (扩展的简单邮件传输协议),SMTP 中定义了 18 条命令,用于发送一封邮件。但是作为一个测试实验的话,我们只需要其中最基本的6条命令。

如下(其中的<Space>代表一个空格,<CRLF>代表回车加换行,即写代码时的 \r\n ):

ehlo<Space>主机名<CRLF>

SMTP 邮件发送程序与SMTP邮件接收程序建立连接的第一条必须的命令,主机名是当前邮件发送者的主机名;

auth<Space>login<CRLF>

现在一般的邮箱都需要进行用户名、密码验证,而且SMTP 邮件服务器一般都使用 Login 验证方式,因此就不用考虑其他两种验证方式了;

mail<Space>from:发送人邮箱地址<CRLF>

从命令中很明显地看出来 mail 命令用于指定邮件发送者的邮箱地址;

rcpt<Space>to:收件人邮箱地址<CRLF>

同理,rcpt 命令用于指定邮件接收人的邮箱地址;

data<CRLF>

data 命令用于表示该命令之后的所有内容、数据都将被作为邮件的相关内容,直到遇到<CRLF>.<CRLF>标识符,即一个句号“.”结束邮件的发送内容;

quit<CRLF>

该命令结束邮件发送过程,关闭本机与SMTP 邮件服务器的网络连接。

在该测试中,我在mail.163.com 和 mail.sina.com 分别注册了 test_hao@163.comtest_hao@sina.cn 两个邮箱,密码都是 123456 。由于这两个邮件服务器都需要进行用户名、密码进行身份验证,而且需要将我们的用户名、密码进行 BASE64 编码之后在进行发送验证,故我们使用 Java 中的 sun.misc.BASE64Encoder 类写一个 BASE64 转码程序,源代码如下:
 

  1. import java.io.BufferedReader;  
  2. import java.io.IOException;  
  3. import java.io.InputStreamReader;  
  4. //import sun.misc.BASE61Encoder;  
  5.  
  6. public class BASE64Util  
  7. {  
  8.     public static void main(String [] args) throws IOException  
  9.     {  
  10.         BufferedReader in = new BufferedReader(new InputStreamReader(System.in));  
  11.         System.out.println("转码前:");  
  12.         System.out.print("用户名 = ");  
  13.         String userName = in.readLine();  
  14.  
  15.         System.out.print("密码 = ");  
  16.         String pwd = in.readLine();  
  17.  
  18.         sun.misc.BASE64Encoder encoder = new sun.misc.BASE64Encoder();  
  19.  
  20.         System.out.println("\n转码后:");  
  21.         System.out.println("用户名 : " + encoder.encode(userName.getBytes()));  
  22.         System.out.println("密码  : " + encoder.encode(pwd.getBytes()));  
  23.     }  

注:由于 BASE61Encoder 类是 JDK 自带的,编译时会出现警告,我们忽略则可。现在将我们的邮箱用户名、密码进行 BASE64 编码,如下:

SMTP测试02

 

准备好这一些之后,可以开始发送邮件了,假设我们将邮件从 163 发送到 sina ,步骤如下(最好将以下一行一行的命令预先写在文本中,否则一旦输入错误就要重新来过了):

1、使用 Telnet 程序连接到 163 的邮件服务器的 25 端口(该端口是默认的),如下图:

SMTP测试03

2、上面第一步完成按下 Enter 一般就会连接得上了,我们再按照上面所说的 6 条最基本的命令来发送邮件,输入ehlo hao (这个主机名自己取一个),返回一系列响应状态码,如下:

SMTP测试04

3、使用 auth 命令进行身份验证,先输入 auth login ,然后再分两步地输入转码后的用户名、密码,其中加了方框的是我们的输入,如下:

SMTP测试05

4、输入邮件发送人邮箱地址、收件人邮箱地址,如下:

SMTP测试06

6、此时可以开始输入邮件内容了,使用 data 命令,再输入内容,如下:

SMTP测试07

 

7、此时,邮件发送成功了,去查看一下,如下图:

SMTP测试08

虽然发送成功了,但是上面的邮件正文不应该包含from 、to 、subject 的相关内容的,我当我从 163 发送到 qq 邮箱时,这些内容被 qq 邮件服务器解析得比较正确,格式很好,这似乎也说明不同的邮件服务器的功能服务有所差别…

使用 Telnet 手工发送邮件的过程到此结束,感受一下,觉得还真的挺麻烦的…

本文出自 “蚂蚁” 博客,请务必保留此出处http://haolloyin.blog.51cto.com/1177454/351256

  评论这张
 
阅读(717)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018