一:SMTP协议(对邮件进行发送)

<SP>代表空格,<CRLF>代表回车和换行

SMTP命令格式 说明
ehlo<SP><domain><CRLF>        ehlo命令是SMTP邮件发送程序与SMTP邮件接收程序建立连接后必须发送的第一条SMTP命令,参数<domain>表示SMTP邮件发送者的主机名。
ehlo命令用于替代传统SMTP协议中的helo命令。
auth<SP><para><CRLF>       如果SMTP邮件接收程序需要SMTP邮件发送程序进行认证时,它会向SMTP邮件发送程序提示它所采用的认证方式,SMTP邮件发送程序接着应该使用这个命令回应SMTP邮件接收程序,参数<para>表示回应的认证方式,通常是SMTP邮件接收程序先前提示的认证方式。
mail<SP>From:<reverse-path><CRLF>     此命令用于指定邮件发送者的邮箱地址,参数<reverse-path>表示发件人的邮箱地址
rcpt<SP>To:<forword-path><CRLF>      此命令用于指定邮件接收者的邮箱地址,参数<forward-path>表示接收者的邮箱地址。如果邮件要发送给多个接收者,那么应使用多条rcpt<SP>To命令来分别指定每一个接收者的邮箱地址。
data<CRLF>      此命令用于表示SMTP邮件发送程序准备开始输入邮件内容,在这个命令后面发送的所有数据都将被当做邮件内容,直至遇到“<CRLF>.<CRLF>"标志符,则表示邮件内容结束。
quit<CRLF>     此命令表示要结束邮件发送过程,SMTP邮件接收程序接收到此命令后,将关闭与SMTP邮件发送程序的网络连接。

smtp服务器的默认网络监听端口是25。

在命令行中输入:telnet smtp.163.com 25进行连接

注意:当我们向服务器进行登入时,默认的是使用Base64编码,我们可以这样编写

package com.wp.utils;

import java.io.BufferedReader;
import java.io.InputStreamReader; import Decoder.BASE64Encoder; /**
* base64编码,用于email
*
* @author admin
*
*/
public class Base64Util {
public static void main(String[] args) throws Exception {
BASE64Encoder base64 = new BASE64Encoder();
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
System.out.println("please input your email name");
String username = br.readLine();
username = base64.encode(username.getBytes());
System.out.println("username in base64:" + username);
System.out.println("please input your email pwd");
String password = br.readLine();
password = base64.encode(password.getBytes());
System.out.println("password in base64:" + password);
}
}

 二:POP3协议(对邮件进行接收)

POP3命令格式 说明
user<SP>username<CRLF>       user 命令是POP3客户端程序与POP3邮件服务器建立连接后通常发送的第一条命令,参数 username 表示收件人的帐户名称。
pass<SP>password<CRLF>       pass 命令是在user命令成功通过后,POP3客户端程序接着发送的命令,它用于传递帐户的密码,参数 password 表示帐户的密码。
apop<SP>name,digest<CRLF>       apop 命令用于替代user和pass命令,它以MD5 数字摘要的形式向POP3邮件服务器提交帐户密码。
stat<CRLF>      stat 命令用于查询邮箱中的统计信息,例如:邮箱中的邮件数量和邮件占用的字节大小等。
uidl<SP>msg#<CRLF>      uidl 命令用于查询某封邮件的唯一标志符,参数msg#表示邮件的序号,是一个从1开始编号的数字。
list<SP>[MSG#]<CRLF>      list 命令用于列出邮箱中的邮件信息,参数 msg#是一个可选参数,表示邮件的序号。当不指定参数时,POP3服务器列出邮箱中所有的邮件信息;当指定参数msg#时,POP3服务器只返回序号对应的邮件信息。
retr<SP>msg#<CRLF>     retr 命令用于获取某封邮件的内容,参数 msg#表示邮件的序号。
dele<SP>msg#<CRLF>     dele 命令用于在某封邮件上设置删除标记,参数msg#表示邮件的序号。POP3服务器执行dele命令时,只是为邮件设置了删除标记,并没有真正把邮件删除掉,只有POP3客户端发出quit命令后,POP3服务器才会真正删除所有设置了删除标记的邮件。
rest<CRLF>     rest 命令用于清除所有邮件的删除标记。
top<SP>msg#<SP>n<CRLF>     top 命令用于获取某封邮件的邮件头和邮件体中的前n行内容,参数msg#表示邮件的序号,参数n表示要返回邮件的前几行内容。使用这条命令以提高 Web Mail系统(通过Web站点上收发邮件)中的邮件列表显示的处理效率,因为这种情况下不需要获取每封邮件的完整内容,而是仅仅需要获取每封邮件的邮件头信息。
noop<CRLF>     noop 命令用于检测POP3客户端与POP3服务器的连接情况。
quit<CRLF>     quit 命令表示要结束邮件接收过程,POP3服务器接收到此命令后,将删除所有设置了删除标记的邮件,并关闭与POP3客户端程序的网络连接。

连接服务器:telnet pop.163.com 110

 三:用IDE工具发送邮件

package com.wp.emailClient;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.Socket; /**
* 用socket发送邮件
*
* @author admin
*
*/
public class EmailClient {
public static void main(String[] args) throws Exception {
// telnet smtp.163.com 25。25是163的smtp端口号,110是163的pop3的端口号
Socket socket = new Socket("smtp.163.com", 25);
InputStream in = socket.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));// 接收服务器的反馈信息
OutputStream out = socket.getOutputStream();// 向服务器发送消息 // 对应图片的7个换行
out.write("ehlo aaa\r\n".getBytes());
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
// 登入
out.write("auth login\r\n".getBytes());// 登入
System.out.println(br.readLine());
out.write("MTg3Nzk3NDA1Njk=\r\n".getBytes());// 根据base64编码后的用户
System.out.println(br.readLine());
out.write("MTUxNzAxNzIxMTJ3dw==\r\n".getBytes());// 密码,要在163里面设置第三方客户端授权码(15170172112ww)
System.out.println(br.readLine());
// 发件收件人
out.write("mail from:<18779740569@163.com>\r\n".getBytes());// 发件人
System.out.println(br.readLine());
out.write("rcpt to:<18779740569@163.com>\r\n".getBytes());// 收件人
System.out.println(br.readLine());
// data表示开始发内容,'.'表示结束
out.write("data\r\n".getBytes());// 开始
System.out.println(br.readLine());
// 遵循RFC822规范
out.write("from:18779740569@163.com\r\n".getBytes());// 从哪到哪
out.write("to:18779740569@163.com\r\n".getBytes());
out.write("subject:asdasd<主题>\r\n".getBytes());// 主题
out.write("\r\n".getBytes());// 换行
out.write("我给你发信息了,你去看一下\r\n".getBytes());// 内容
out.write(".\r\n".getBytes());// 结束
socket.close();// quit
}
}

利用DOS命令窗口进行Mail通信(二)的更多相关文章

  1. dos命令窗口修改编码,CMD编码修改方法

    dos命令窗口修改编码,CMD编码修改方法 第一步,打开命令窗口有两种方法第一种:可以点击左下角的开始按钮,在运行里面输入CMD,然后敲回车2第二种:组合键WIN+R键,组合键后就会弹出窗口,然后输入 ...

  2. 运行批处理文件怎么不显示DOS命令窗口

    运行批处理文件怎么不显示DOS命令窗口   BAT没法不显示DOS窗口.你可以考虑用脚本保持以下到文本文件,重命名为AutoUp_ddyy.vbs set WshShell = WScript.Cre ...

  3. 根据端口号,利用DOS命令杀死进程

    比如利用DOS命令找出占用8080端口的程序的PID 然后用DOS命令杀死该进程 kill

  4. 如何从DOS命令窗口进行复制粘贴

    在DOS窗口没有右键复制按钮,那我们如果想要进行复制粘贴该如何操作呢?本篇就来说明一下这个操作流程. 工具/原料   WIN7系统 方法/步骤     按“WIN+R”调出运行页面,在其中输入CMD然 ...

  5. 如何快速的打开当前文件夹的dos命令窗口

    一.常规方法: 1.使用 “window + R” 组合键,输入cmd回车.如下图所示: 2.如果你要定位到指定的文件夹,那么需要用cd等命令来处理.如下图所示: 二.快速方法: 按住“shift”键 ...

  6. 在当前目录打开DOS命令窗口

    Windows7系统:Shift + 鼠标右键 Windows10系统:Shift + 鼠标右键打开Power shell,在Power shell的命令窗口中输入:start cmd

  7. 利用DOS命令做伪装成图片的压缩包,看上去是图片其实是个压缩包用2条命令即搞定

    在很多地方我们看到一张图片,然后把这张图片下载到本地,改后缀名为xx.rar,即变成了压缩包. 比如下面这个图片:(把以下图片保存到本地,后缀名xx.png 改为 xx.rar,解压试试) 怎么样,是 ...

  8. windows dos命令窗口的环境变量

    今天安装maven的时候遇到mvn -v显示mvn不是命令行,环境变量maven_home和path路径都配置了. 首先查看windows下的环境变量: >set maven_home MAVE ...

  9. win7 dos命令窗口内容显示不全解决办法--将命令执行结果输出到一个文件中

    执行命令:命令 >>某某路径\文件全名

随机推荐

  1. 腾讯优测优分享 | Android适配中的一些特殊情况小结

    腾讯优测是专业的自动化测试平台,提供全面兼容适配测试,远程真机租用等多维度的测试服务! 作为一名"艰苦卓绝"的软件工程师,我在开发路上经常被各种奇葩情况虐的体无完肤...今天就想与 ...

  2. myeclipse 手动安装 lombok

    1. 将 lombok.jar 复制到 myeclipse.ini / eclipse.ini 所在的文件夹目录下    2. 打开 eclipse.ini / myeclipse.ini,在最后面插 ...

  3. vim显示行号

    在Linux环境下的编辑器有vi.vim.gedit等等.进入这些编辑器之后,为了方便我们需要编辑器显示出当前的行号,可偏偏编辑器默认是不会显示行号的.我们有二种办法可以解决: 第一种是,手动显示:在 ...

  4. ssh git设置命令行

    #列出key ls -al ~/.ssh #生成key ssh-keygen -t rsa -b -C "your_email@example.com" #判断ssh-agent可 ...

  5. A:点排序-poj

    A:点排序 总时间限制:  1000ms 内存限制:  65536kB 描述 给定一个点的坐标(x, y),在输入的n个点中,依次计算这些点到指定点的距离,并按照距离进行从小到大排序,并且输出点的坐标 ...

  6. Openresty安装及使用配置(OPENRESTY+NGINX)

    Openresty 简介 Openresty是一个基于NGINX和Lua的高性能Web平台,内部有大量的Lua库和第三方模块,能够很方便的搭建处理高并发,扩展性高的Web平台和动态网关,充分利用 Ng ...

  7. Android -- Glide框架详解(一)

    1,使用这个框架快两年了,今天去github上去看了一下,貌似已经从3.X升级到4.X了,想着自己还没有对这个框架在博客上做过总结,所以这里打算出三篇博客来介绍,内容有基本使用.3.X与4.X的不通. ...

  8. 设置table的每竖的宽度

  9. Android Studio 问题

    1.问题:android studio 安装 apk 闪退 方法: Build → Clean Project 一下再安装 2.问题:Gradle failed: already disposed m ...

  10. Windows下mysql服务的安装与卸载

    安装 mysqld -install 也可以指定mysql安装服务的文件 my.ini文件配置好后就可以在cmd中安装mysqld服务了,在cmd中运行命令:mysqld --install MySQ ...