import java.io.*;
import java.net.NoRouteToHostException;
import java.net.Socket;
import java.util.*;
import javax.naming.NamingException;
import sun.misc.BASE64Encoder;
public class WorkThread extends Thread
{
String domain;
String to;
String subject;
String body;
String myEncode="gb2312";
public String hosts[]={
"google.com","sun.com","borland.com","dell.com","163.com","263.com",
"sina.com","etang.com","sohu.com" };
String from="ddd@"+getRandomDomain();
public void run(){
String mxServers[]=null;
MxFinder finder = new MxFinder(domain,"202.204.208.2");
try
{
mxServers = finder.getMxServers();
}
catch(NamingException e)
{
e.printStackTrace();
};
if(mxServers==null)
{
System.out.println("address is wrong");
}else{
try{
L1:
for(int i=0;i<mxServers.length;i++)
{
String mxServer=mxServers[i];
for(int j=0;j<3;j++)
{
Socket socket=new Socket(mxServer,25);
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
String response = "";
response = readLastLine(dis);
if(!response.startsWith("220"))
{
dis.close();
dos.close();
socket.close();
dis = null;
dos = null;
socket = null;
continue;
} else { //连接成功,开始写入HELO,标识自己身份
dos.writeBytes("HELO "+domain+"\r\n");
response = readLastLine(dis);
if(!response.startsWith("250"))
{ //无法识别此域名,可在此进行相应处理; dis.close();
dos.close();
socket.close();
dis = null;
dos = null;
socket = null;
continue;
} else
{ //SMTP可以识别此域名;写入:MAIL FROM告诉服务器想发一封邮件;
dos.writeBytes("MAIL FROM: "+from+"\r\n");
response = readLastLine(dis);
System.out.println(response);
if(!response.startsWith("250"))
{ //SMTP服务器不打算接收邮件,可在此做相应处理;
System.out.println("failure"); dis.close();
dos.close();
socket.close();
dis = null;
dos = null;
socket = null;
continue;
} else
{ //SMTP服务器准备接收邮件,写入RCPT TO告诉服务器收件人地址;
dos.writeBytes("RCPT TO: <"+to+">\r\n");
response = readLastLine(dis);
if(!response.startsWith("250"))
{ //SMTP不愿意为接收人接收邮件,可在此进行相应处理; dis.close();
dos.close();
socket.close();
dis = null;
dos = null;
socket = null;
continue;
}else
{ //SMTP愿意为接收入接收邮件,写入DATA表明开始邮件传送;
dos.writeBytes("DATA\r\n");
response = readLastLine(dis);
if(!response.startsWith("354"))
{ dis.close();
dos.close();
socket.close();
dis = null;
dos = null;
socket = null;
continue;
} else
{ //SMTP服务器同意开始输入邮件,对邮件体的//From,To,Subject,Data等做相应设置,写入要传送的邮件体//正文:body;
dos.writeBytes("From:< "+getStr(from,myEncode)+">\r\n");
dos.writeBytes("To: <"+getStr(to,myEncode)+">\r\n");
dos.writeBytes("Subject: "+getStr(subject,myEncode)+"\r\n");
dos.writeBytes("Reply-To: <"+from+">\r\n");
dos.writeBytes("mime-version: 1.0\r\n");
dos.writeBytes("Content-Type: text/html;\r\n"); dos.writeBytes("Content-Transfer-Encoding: Base64");
dos.writeBytes("\r\n\r\n");
dos.writeBytes(getBase64(body));
dos.writeBytes("\r\n\r\n"); dos.writeBytes("\r\n.\r\n");
response =readLastLine(dis);
if(!response.startsWith("250"))
{ //发送失败,可在此做相应处理; dis.close();
dos.close();
socket.close();
dis = null;
dos = null;
socket = null;
continue;
} else
{ //发送成功,结束此次传送;
dos.writeBytes("quit\r\n");
dis.close();
dos.close();
socket.close();
dis = null;
dos = null;
socket = null; break L1;
}//sixth else
}//fifth else
}//fourth else
}//third else
} //second else
}//first else
}
}
}catch(Exception e){ e.printStackTrace();}
}
}//run end
private String readLastLine(DataInputStream in) throws IOException
{
String ret = "";
do
{
BufferedReader d= new BufferedReader(new InputStreamReader(in));
ret=d.readLine();
} while(in.available() > 0);
return ret;
}
private String getBase64(String str)
{
return (new BASE64Encoder().encode(str.getBytes()));
}
public static String getStr(String str, String encode)
{
try
{
byte temp[] = str.getBytes(encode);
String tmp = new String(temp, "8859_1");
String s = tmp;
return s;
}
catch(Exception exception)
{
return null;
}
}
private String getRandomDomain()
{
String ret = "";
Random r = new Random(System.currentTimeMillis());
ret = hosts[r.nextInt(hosts.length)];
return ret;
}
public static void main(String[] args)
{
WorkThread wt=new WorkThread();
int pos;
if(args.length<3) System.out.println("请输入您要发送到的邮件地址(如:dddd@163.com)、主题、内容");
else{
wt.to=args[0];
wt.subject=args[1];
wt.body=args[2];
pos=wt.to.indexOf("@");
if(pos==-1) System.out.println("您输入的地址错误,请重新输入");
else { wt.domain=wt.to.substring(pos+1);
wt.start();
}
}
}
}
分享到:
相关推荐
Java SMTP协议电子邮件传送剖析 在Java编程环境中,发送电子邮件是一个常见的任务,这通常涉及到使用SMTP(Simple Mail Transfer Protocol)协议。SMTP是互联网上用于传输邮件的标准协议,它定义了邮件服务器之间...
在Java编程语言中,我们可以使用JavaMail API来实现SMTP协议的功能,发送电子邮件。JavaMail API提供了一系列接口和类,如`Session`、`Message`、`Transport`等,帮助开发者轻松地构建邮件发送功能。 首先,你需要...
实例45 Java SMTP协议电子邮件传送剖析 实例46 Java Applet与浏览器间的通信技术 实例47 Java实现邮件群发 实例48 应用Java和JSP设计完整的文件上传系统 实例49 Java编程序搜索网络服务器 实例52 使用Java...
SMTP,即Simple Mail Transfer Protocol,简单邮件传输协议,是互联网上用于发送电子邮件的标准协议。它定义了邮件服务器如何将邮件从一台计算机传送到另一台计算机。SMTP在1982年由RFC821文档标准化,并在后续的RFC...
首先,让我们从基础开始,了解电子邮件系统的核心协议。 1. SMTP(Simple Mail Transfer Protocol):SMTP是发送邮件的主要协议,用于在邮件服务器之间传递邮件。它定义了如何将邮件从一个主机传送到另一个主机的...
在电子邮件管理软件课程设计中,主要介绍了JavaMail API的应用,JavaMail 是Sun 公司为Java 开发人员提供的公共应用程序接口框架,提供了一个与平台无关、协议独立的框架,预置了一些最常用的邮件传送协议的实现方法...
SMTP协议是Internet传送电子邮件的基本协议,也是TCP/IP协议组的成员。SMTP协议解决了系统如何通过一条链路,把电子邮件从一台机器传送到另一台机器上的问题。SMTP协议的特点是具有良好的可伸缩性,这也是它成功的...
SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)是互联网上用于在邮件服务器之间发送电子邮件的标准协议。它定义了如何将邮件从一个系统传送到另一个系统的一系列步骤,是电子通信中不可或缺的一部分。在...
例如,当你在电子邮件客户端(如Outlook或Thunderbird)中撰写并发送邮件时,SMTP负责将邮件传送到对方的邮件服务器;当对方想要查看邮件时,他们的邮件客户端使用POP3从自己的邮件服务器下载新邮件。 **SMTP及POP3...
SMTP 是互联网协议集中的邮件标准,能够接收电子邮件的服务器都有 SMTP。POP3 可以允许 E-mail 客户向某一 SMTP 服务器发送电子邮件,也可以接收来自 SMTP 服务器的电子邮件。 三、电子邮件地址的构成 电子邮件...
SMTP 负责将电子邮件从一台计算机传送到另一台计算机,POP3 则允许电子邮件客户端从邮件服务器接收电子邮件。 二、电子邮件的发送和接收 电子邮件的发送和接收可以用我们日常生活中邮寄包裹来形容。当我们发送电子...
James(Java Apache Mail Enterprise Server)作为Apache软件基金会的一个开源项目,完全基于Java技术构建,支持SMTP、POP3与NNTP等多种邮件协议,成为了邮件应用平台中的佼佼者。 基于James的WebMail系统的开发,...
James(Java Apache Mail Enterprise Server)是Apache基金会旗下的一个开源项目,它是一款基于Java技术的邮件服务器平台,支持SMTP、POP3以及NNTP等多种邮件协议。基于James,可以通过结合JSP技术和MySQL数据库来...
POP3(Post Office Protocol version 3)是一种电子邮件协议,用于从邮件服务器检索电子邮件。SMTP(Simple Mail Transfer Protocol)则是用于发送邮件的协议。在IT领域,理解这两种协议的工作原理是处理电子邮件...
一旦某个组织的电子邮件系统运行在支持TCP/IP协议的网络上或具有支持两个Internet邮件服务协议SMTP(简单邮件传输协议)和POP(邮局协议)之一的Internet网关,它的邮件用户就能够连接到任何具有相似连接的电子邮件地址...
尽管随着电子邮件和社交媒体的发展,NNTP的使用可能不像过去那样普遍,但它仍然是某些社区和信息交流的重要工具。Java开发者可以利用Java的IO和Socket库来实现NNTP客户端和服务器的编程,以便在应用程序中集成NNTP...
【SMTP协议详解与电子邮件系统构建】 SMTP(Simple Mail Transfer Protocol),简单邮件传输协议,是互联网上用于在邮件服务器之间发送电子邮件的标准。实验“Windows环境下用smtp实现Email客户端”旨在让学生深入...
电子邮件发送程序的发送方式有两种:第一种是本地计算机与用户所指定的发送邮件 服务器连接,然后通过发送邮件服务器将邮件传送到接收邮件的服务器,邮件中包含有 信件主题和内容等一系列信息;第二种是本地计算机...
邮件传输原理在 Internet 上将一段文本信息从一台计算机传送到另一台计算机上,可以通过两种协议来完成,即 SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)和 POP3(Post Office Protocol,邮局协议 3)...