怎么不用javamail实现带密码验证的发邮件程序?用“mail to:......”什么的

hawk000 2003-12-17 12:06:57
怎么不用javamail实现带密码验证的发邮件程序?用“mail to:......”什么的
...全文
541 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zealVampire 2003-12-17
  • 打赏
  • 举报
回复
//不用javaMail发送邮件
import java.net.*;
import java.io.*;
import java.util.*;
//import javax.mail.*;
//import javax.mail.internet.*;

public class SmtpTalk {
BufferedReader is;
PrintStream os;
private boolean debug=true;
private String host;
sun.misc.BASE64Encoder enc;
private String user;
private String psw;


public static void main(String[] argv){
if(argv.length!=2){
System.out.println("Usage:java SmtpTalk host user");
System.exit(1);
}


try{
SmtpTalk st=new SmtpTalk(argv[0]);
System.out.println("Smtp Talker ready");

st.converse("madass@163.net",argv[1],"Test message",
"helo there");
}catch(Exception ig){
System.err.println(ig.getMessage());
System.exit(1);
}
}


SmtpTalk(String Server){
host=Server;
enc = new sun.misc.BASE64Encoder();
user=new String("madass");
psw=new String ("xinxin");



try{
Socket s=new Socket(host,25);
is=new BufferedReader(new InputStreamReader(s.getInputStream()));
os=new PrintStream(s.getOutputStream());
}
catch(NoRouteToHostException e){
die(/*EX_TEMPFAIL*/1,"No route to host "+host);
}
catch(ConnectException e){
die(/*EX_TEMPFAIL*/1,"Connection Refused by"+host);
}
catch(UnknownHostException e){
die(/*EX_NOHOST*/2,"Unknown host "+host);
}
catch(IOException e){
die(/*EX_IOERR*/3,"I/O error setting up socket stream\n"+e);
}
}


protected void send_cmd (String cmd,String oprnd){
send_cmd(cmd+" "+oprnd);
}

protected void send_cmd(String cmd){
if(debug)
System.out.println(">>>"+cmd);
os.print(cmd+"\r\n");
}

public void send_text(String text){
os.print(text+"\r\n");
}

protected boolean expect_reply(String rspNum) /*throw SMTPException*/{
String s=null;
try{
s=is.readLine();
}catch(IOException e){
die(/*EX_IOERR*/3,"I/o error reading from host"+host+" "+e);
}
if(debug) System.out.println("<<<"+s);
return s.startsWith(rspNum+" ");
}


protected void die(int ret,String msg)/* throw SMTPException*/{
//throw new SMTPException (ret,msg);
}

public void converse(String sender,String recipients,String subject,String body) /*throw SMTPException*/{

if(!expect_reply("220")) die(/*EX_PROTOCOL*/4,"did not get SMTP greeting");

send_cmd("HELO","madass@163.net");
if(!expect_reply("250")) die(/*EX_PROTOCOL*/4,"did not get ack our HELO");
send_cmd("RSET");
if(!expect_reply("250")) die (/*EX_PROTOCOL*/4,"not reset");

send_cmd("AUTH LOGIN");
if(!expect_reply("334")) die (/*EX_PROTOCOL*/4,"not reset");

send_cmd(enc.encode(user.getBytes()));
if(!expect_reply("334")) die (/*EX_PROTOCOL*/4,"not reset");

send_cmd(enc.encode(psw.getBytes()));
if(!expect_reply("334")) die (/*EX_PROTOCOL*/4,"not reset");



send_cmd("MAIL","From:<"+sender+">");
if(!expect_reply("250")) die (/*EX_PROTOCOL*/4,"did not ack our MAIL command");

//StringTokenizer st=new StringTokenizer(recipients);
//while(st.hasMoreTokens()){
//String r=st.nextToken();
send_cmd("RCPT","To:<"+recipients+">");
if(!expect_reply("250"))
die(/*EX_PROTOCOL*/4,"did not ack RECP");
//}

send_cmd("DATA");
if(!expect_reply("354")) die(/*EX_PROTOCOL*/4,"did not want our data");

send_text("From: "+sender);
send_text("To: "+recipients);
send_text("Subject: "+subject);
send_text("");
send_text(body+"\r");

send_cmd(".");
if(!expect_reply("250")) die(/*EX_PROTOCOL*/4,"mail not accepted");

send_cmd("QUIT");
if(!expect_reply("221")) die(/*EX_PROTOCOL*/4,"Other end not closing down");


}

}
Acylas 2003-12-17
  • 打赏
  • 举报
回复
用java里面的socket就行了,smtp协议很简单的
CoolAbu 2003-12-17
  • 打赏
  • 举报
回复
用不用验证码是看邮件服务器有没有设,不是程序中来设的。可以在命令行中使用Mailto,但前提是你知道这些命令行的命令怎么用。
xkak2 2003-12-17
  • 打赏
  • 举报
回复
你在说什么?没有看懂
zkhj 2003-12-17
  • 打赏
  • 举报
回复
如果用哪样的话,不是要安装outlook之类的第三方软件才行。
javamail完全可以实现你所需要的功能。

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧