|
锁定老贴子 主题:Socket收发邮件--SMTP和POP3
精华帖 (0) :: 良好帖 (2) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2006-12-26 关键字: socket
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) { class SMTPDemo { 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2006-12-28
smtp少了需要帐号密码的功能
|
|
| 返回顶楼 | |
|
最后更新时间:2007-04-27
为什么我发的helo服务器都没有响应阿,我只想看一下简单的smtp交互过程。可是服务器返回的都是null
import java.net.*;
import java.io.*;
public class SendMail {
String from ="xxx@163.com";
String to="ahurm001@gmail.com";
String subject="hello";
String mailServer="smtp.163.com";
String data="nihoa";
Socket s=null;
PrintWriter bout=null;
BufferedReader br=null;
protected void sendM(String mess){
try{
if(mess!=null)
{
bout.write(mess);
System.out.println("C "+mess);
bout.flush();
}
System.out.println("S "+br.readLine());
}
catch(Exception e){
e.getStackTrace();
}
}
public SendMail(){
try{
s=new Socket(mailServer,25);
System.out.println(""+s);
bout=new PrintWriter(s.getOutputStream());
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
//sendM(null);
sendM("HELO "+"xxxx@163.com");
sendM("MAIL FORM: "+from);
sendM("RCPT TO: "+to);
sendM("DATA");
bout.println("Subject: "+subject);
bout.println(data);
sendM(".");
bout.close();
s.close();
}
catch(Exception e){
e.getStackTrace();
}
}
/**
* @param args
*/
public static void main(String[] args) {
SendMail a=new SendMail();
// TODO Auto-generated method stub
}
}
|
|
| 返回顶楼 | |
浏览 2878 次





