java smtp pop3_Java邮件收发SMTP和POP3

Java邮件收发SMTP和POP3

SMTP的连接和收发过程:

a.建立TCP连接。

b.客户端发送HELO命令以标识发件人自己的身份,然后客户端发送MAIL命令服务器端正希望以OK作为响应,表明准备接收。

c.客户端发送RCPT命令,以标识该电子邮件的计划接收人,可以有多个RCPT行

d.协商结束,发送邮件,用命令DATA发送

e.以.表示结束输入内容一起发送出去

f.结束此次发送,用QUIT命令退出。

SMTP的基本命令集:

HELO 向服务器标识用户身份

MAIL 初始化邮件传输mail from:

RCPT 标识单个的邮件接收人;常在MAIL命令后面可有多个rcpt to:

DATA 在单个或多个RCPT命令后,表示所有的邮件接收人已标识,初始化数据传输,以.结束。

NOOP 无操作,服务器应响应OK

RSET 重置会话,当前传输被取消

QUIT 结束会话

POP3简介:

在POP3协议中有三种状态,认可状态,处理状态,和更新状态。当客户机与服务器建立联系时,一旦客户机提供了自己身份并成功确认,即由认可状态转入处理状态,在完成相应的操作后客户机发出quit命令,则进入更新状态,更新之后最后重返认可状态。

POP3基本命令集:

USER username

PASS password

STAT 请求服务器发回关于邮箱的统计资料,如邮件总数和总字节数

LIST 返回邮件数量和每个邮件的大小

RETR [Msg#] 返回由参数标识的邮件的全部文本

DELE [Msg#] 服务器将由参数标识的邮件标记为删除,由quit命令执行

RSET 服务器将重置所有标记为删除的邮件,用于撤消DELE命令

NOOP 服务器返回一个肯定的响应

QUIT 更新

class POP3Demo {

private static String POP3Server = "pop.126.com";

private static String USERNAME = "username";//实际应用中改成真实的用户名

private static String PASSWORD = "password";//实际应用中改成真实的密码

public static void main(String[] args) {

int POP3Port = 110;

Socket client = null;

try {

// 向POP3服务程序建立一个套接字连接。

client = new Socket(POP3Demo.POP3Server, POP3Port);

// 创建一个BufferedReader对象,以便从套接字读取输出。

InputStream is = client.getInputStream();

BufferedReader sockin = new BufferedReader(new InputStreamReader(is));

// 创建一个PrintWriter对象,以便向套接字写入内容。

OutputStream os = client.getOutputStream();

PrintWriter sockout = new PrintWriter(os, true);

// 显示同SMTP服务程序的握手过程。

System.out.println("S:" + sockin.readLine());

sockout.println("user " + POP3Demo.USERNAME);

System.out.println("S:" + sockin.readLine());

sockout.println("pass " + POP3Demo.PASSWORD);

System.out.println("S:" + sockin.readLine());

sockout.println("stat");

String temp[] = sockin.readLine().split(" ");

int count = Integer.parseInt(temp[1]);//得到信箱中共有多少封邮件

for (int i = 1; i < count + 1; i++) {//依次打印出邮件的内容

sockout.println("retr " + i);

System.out.println("以下为第" + i + "封邮件的内容");

while (true) {

String reply = sockin.readLine();

System.out.println(reply);

if (reply.toLowerCase().equals(".")) {

break;

}

}

}

} catch (IOException e) {

System.out.println(e.toString());

} finally {

try {

if (client != null) {

client.close();

}

} catch (IOException e) {}

}

}

}

class SMTPDemo {

//以下三项请在使用时改成真实的信箱地址

//并且注意,SMTPServer和receiver必须是同一个服务器

private static String sender = "sender";

private static String receiver = "receiver";

private static String SMTPServer = "smtpserver";

public static void main(String[] args) {

int SMTPPort = 25;

Socket client = null;

try {

// 向SMTP服务程序建立一个套接字连接。

client = new Socket(SMTPDemo.SMTPServer, SMTPPort);

// 创建一个BufferedReader对象,以便从套接字读取输出。

InputStream is = client.getInputStream();

BufferedReader sockin = new BufferedReader(new InputStreamReader(is));

// 创建一个PrintWriter对象,以便向套接字写入内容。

OutputStream os = client.getOutputStream();

PrintWriter sockout = new PrintWriter(os, true);

// 显示同SMTP服务程序的握手过程。

System.out.println("S:" + sockin.readLine());

sockout.println("helo");

System.out.println("S:" + sockin.readLine());

sockout.println("mail from: " + "");

System.out.println("S:" + sockin.readLine());

sockout.println("rcpt to: " + "");

System.out.println("S:" + sockin.readLine());

sockout.println("data");

//发送邮件标题

sockout.println("subject: 你好");

//发送邮件内容

sockout.println("ni hao");

sockout.println("wo shi li jian");

//此处的.为特殊标记,表示邮件结束

sockout.println(".");

sockout.println("rset");

sockout.println("quit");

} catch (IOException e) {

System.out.println(e.toString());

} finally {

try {

if (client != null) {

client.close();

}

} catch (IOException e) {}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值