如何在本机上利用java实现smtp邮件服务器

如何在本机上利用java实现smtp邮件服务器,第1张

  1修改<postmaster>localhost</postmaster>,改成你自己的服务器域名,比如:<postmaster>support@</postmaster>

  2修改这些,也是改成自己的

  <servernames autodetect="false" autodetectIP="false">

  <servername></servername>

  </servernames>

  3修改dns server,这是为了可以发外网邮件,查看DNS地址使用ipconfig/all,然后在配置文件中dnsserver节点下加入server地址

以前写的,照贴了。。。服务器端:import javaawt;\x0d\import javaawteventWindowAdapter;\x0d\import javaawteventWindowEvent;\x0d\import javaio;\x0d\import javanet;/6、 采用UDP协议,编写一个Java网络应用程序,该应用分服务器端程序和客户端程序两部分。\x0d\ 客户端指定一个服务器上的文件名,让服务器发回该文件的内容,或者提示文件不存在。\x0d\ (20分)(服务端程序和客户端程序分别命名为Serverjava和Clientjava)/\x0d\public class N4BT6 extends Frame\x0d\{\x0d\DatagramSocket socket ;\x0d\DatagramPacket packet ;byte[] buf ;\x0d\File file ;\x0d\FileInputStream input;\x0d\String message = "该文件不存在";\x0d\TextArea text;\x0d\public N4BT6(String title)\x0d\{\x0d\super(title);\x0d\text = new TextArea(6,4);\x0d\add(text);\x0d\setSize(400, 300);\x0d\setVisible(true);\x0d\addWindowListener(new WindowAdapter()\x0d\{\x0d\public void windowClosing(WindowEvent e)\x0d\{\x0d\dispose();\x0d\}\x0d\});\x0d\\x0d\buf = new byte[1024];\x0d\try\x0d\{\x0d\socket = new DatagramSocket(1230);\x0d\packet = new DatagramPacket(buf, buflength);\x0d\socketreceive(packet);\x0d\file = new File(new String(packetgetData()));\x0d\socket = new DatagramSocket();\x0d\} \x0d\catch (Exception e)\x0d\{eprintStackTrace();\x0d\}\x0d\\x0d\if(fileexists())\x0d\{\x0d\try\x0d\{\x0d\buf = new byte[(int)filelength()];\x0d\packet = new DatagramPacket(buf,buflength,InetAddressgetLocalHost(),1234);\x0d\input = new FileInputStream(file);\x0d\inputread(buf);\x0d\socketsend(packet);\x0d\}\x0d\catch (IOException e) \x0d\{\x0d\eprintStackTrace();\x0d\}\x0d\}\x0d\else\x0d\{\x0d\try\x0d\{\x0d\packet = new DatagramPacket(messagegetBytes(),messagegetBytes()length,\x0d\InetAddressgetLocalHost(),1234);\x0d\socketsend(packet);\x0d\}\x0d\catch (Exception e) \x0d\{\x0d\eprintStackTrace();\x0d\}\x0d\}\x0d\\x0d\}\x0d\public static void main(String[] args)\x0d\{\x0d\new N4BT6("Server");\x0d\}\x0d\}\x0d\客户端:import javaawt;\x0d\import javaawtevent;\x0d\import javanetDatagramPacket;\x0d\import javanetDatagramSocket;\x0d\import javanetInetAddress;public class N4BT6_2 extends Frame\x0d\{\x0d\TextArea text;\x0d\String message = "Qtxt";\x0d\DatagramSocket socket ;\x0d\DatagramPacket packet;\x0d\byte[] buf;\x0d\public N4BT6_2(String title)\x0d\{\x0d\super(title);\x0d\text = new TextArea(6,4);\x0d\add(text);\x0d\setSize(400, 300);\x0d\setVisible(true);\x0d\addWindowListener(new WindowAdapter()\x0d\{\x0d\public void windowClosing(WindowEvent e)\x0d\{\x0d\dispose();\x0d\}\x0d\});\x0d\try\x0d\{\x0d\\x0d\socket = new DatagramSocket();\x0d\packet = new DatagramPacket(messagegetBytes(),messagegetBytes()length,\x0d\InetAddressgetLocalHost(),1230);\x0d\socketsend(packet);\x0d\}\x0d\catch (Exception e) \x0d\{\x0d\eprintStackTrace();\x0d\}\x0d\\x0d\try\x0d\{\x0d\buf = new byte[1024];\x0d\socket = new DatagramSocket(1234);\x0d\packet = new DatagramPacket(buf,buflength);\x0d\socketreceive(packet);\x0d\textappend(new String(buf));\x0d\}\x0d\catch (Exception e) \x0d\{\x0d\eprintStackTrace();\x0d\}\x0d\}\x0d\public static void main(String[] args)\x0d\{\x0d\new N4BT6_2("Client");\x0d\}\x0d\}

服务器端源码:

import javaioBufferedReader;

import javaioFile;

import javaioFileNotFoundException;

import javaioFileOutputStream;

import javaioIOException;

import javaioInputStream;

import javaioInputStreamReader;

import javanetServerSocket;

import javanetSocket;

/

文件名:ServerReceivejava

实现功能:作为服务器接收客户端发送的文件

具体实现过程:

1、建立SocketServer,等待客户端的连接

2、当有客户端连接的时候,按照双方的约定,这时要读取一行数据

其中保存客户端要发送的文件名和文件大小信息

3、根据文件名在本地创建文件,并建立好流通信

4、循环接收数据包,将数据包写入文件

5、当接收数据的长度等于提前文件发过来的文件长度,即表示文件接收完毕,关闭文件

6、文件接收工作结束

public class ServerReceive {

public static void main(String[] args) {

/与服务器建立连接的通信句柄/

ServerSocket ss = null;

Socket s = null;

/定义用于在接收后在本地创建的文件对象和文件输出流对象/

File file = null;

FileOutputStream fos = null;

/定义输入流,使用socket的inputStream对数据包进行输入/

InputStream is = null;

/定义byte数组来作为数据包的存储数据包/

byte[] buffer = new byte[4096 5];

/用来接收文件发送请求的字符串/

String comm = null;

/建立socekt通信,等待服务器进行连接/

try {

ss = new ServerSocket(4004);

s = ssaccept();

} catch (IOException e) {

eprintStackTrace();

}

/读取一行客户端发送过来的约定信息/

try {

InputStreamReader isr = new InputStreamReader(sgetInputStream());

BufferedReader br = new BufferedReader(isr);

comm = brreadLine();

} catch (IOException e) {

Systemoutprintln("服务器与客户端断开连接");

}

/开始解析客户端发送过来的请求命令/

int index = commindexOf("/#");

/判断协议是否为发送文件的协议/

String xieyi = commsubstring(0, index);

if(!xieyiequals("111")){

Systemoutprintln("服务器收到的协议码不正确");

return;

}

/解析出文件的名字和大小/

comm = commsubstring(index + 2);

index = commindexOf("/#");

String filename = commsubstring(0, index)trim();

String filesize = commsubstring(index + 2)trim();

/创建空文件,用来进行接收文件/

file = new File(filename);

if(!fileexists()){

try {

filecreateNewFile();

} catch (IOException e) {

Systemoutprintln("服务器端创建文件失败");

}

}else{

/在此也可以询问是否覆盖/

Systemoutprintln("本路径已存在相同文件,进行覆盖");

}

/以上就是客户端代码中写到的服务器的准备部分/

/

服务器接收文件的关键代码/

try {

/将文件包装到文件输出流对象中/

fos = new FileOutputStream(file);

long file_size = LongparseLong(filesize);

is = sgetInputStream();

/size为每次接收数据包的长度/

int size = 0;

/count用来记录已接收到文件的长度/

long count = 0;

/使用while循环接收数据包/

while(count < file_size){

/从输入流中读取一个数据包/

size = isread(buffer);

/将刚刚读取的数据包写到本地文件中去/

foswrite(buffer, 0, size);

fosflush();

/将已接收到文件的长度+size/

count += size;

Systemoutprintln("服务器端接收到数据包,大小为" + size);

}

} catch (FileNotFoundException e) {

Systemoutprintln("服务器写文件失败");

} catch (IOException e) {

Systemoutprintln("服务器:客户端断开连接");

}finally{

/

将打开的文件关闭

如有需要,也可以在此关闭socket连接

/

try {

if(fos != null)

fosclose();

} catch (IOException e) {

eprintStackTrace();

}//catch (IOException e)

}//finally

}//public static void main(String[] args)

}//public class ServerReceive

客户端源码:

import javaioFile;

import javaioFileInputStream;

import javaioFileNotFoundException;

import javaioIOException;

import javaioOutputStream;

import javaioPrintStream;

import javanetSocket;

/

文件名:ClientSendjava

实现功能:作为客户端向服务器发送一个文件

具体实现过程:

1、建立与服务器端的连接,IP:127001, port:4004

2、将文件的名字和大小通过自定义的文件传输协议,发送到服务器

3、循环读取本地文件,将文件打包发送到数据输出流中

4、关闭文件,结束传输

/

public class ClientSend {

public static void main(String[] args) {

/与服务器建立连接的通信句柄/

Socket s = null;

/定义文件对象,即为要发送的文件

如果使用绝对路径,不要忘记使用'/'和'\'的区别

具体区别,请读者自行查询

/

File sendfile = new File("APICHM");

/定义文件输入流,用来打开、读取即将要发送的文件/

FileInputStream fis = null;

/定义byte数组来作为数据包的存储数据包/

byte[] buffer = new byte[4096 5];

/定义输出流,使用socket的outputStream对数据包进行输出/

OutputStream os = null;

/检查要发送的文件是否存在/

if(!sendfileexists()){

Systemoutprintln("客户端:要发送的文件不存在");

return;

}

/与服务器建立连接/

try {

s = new Socket("127001", 4004);

}catch (IOException e) {

Systemoutprintln("未连接到服务器");

}

/用文件对象初始化fis对象

以便于可以提取出文件的大小

/

try {

fis = new FileInputStream(sendfile);

} catch (FileNotFoundException e1) {

e1printStackTrace();

}

/首先先向服务器发送关于文件的信息,以便于服务器进行接收的相关准备工作

具体的准备工作,请查看服务器代码。

发送的内容包括:发送文件协议码(此处为111)/#文件名(带后缀名)/#文件大小

/

try {

PrintStream ps = new PrintStream(sgetOutputStream());

psprintln("111/#" + sendfilegetName() + "/#" + fisavailable());

psflush();

} catch (IOException e) {

Systemoutprintln("服务器连接中断");

}

/

此处睡眠2s,等待服务器把相关的工作准备好

也是为了保证网络的延迟

读者可自行选择添加此代码

/

try {

Threadsleep(2000);

} catch (InterruptedException e1) {

e1printStackTrace();

}

/之前的准备工作结束之后

下面就是文件传输的关键代码

/

try {

/获取socket的OutputStream,以便向其中写入数据包/

os = sgetOutputStream();

/ size 用来记录每次读取文件的大小/

int size = 0;

/使用while循环读取文件,直到文件读取结束/

while((size = fisread(buffer)) != -1){

Systemoutprintln("客户端发送数据包,大小为" + size);

/向输出流中写入刚刚读到的数据包/

oswrite(buffer, 0, size);

/刷新一下/

osflush();

}

} catch (FileNotFoundException e) {

Systemoutprintln("客户端读取文件出错");

} catch (IOException e) {

Systemoutprintln("客户端输出文件出错");

}finally{

/

将打开的文件关闭

如有需要,也可以在此关闭socket连接

/

try {

if(fis != null)

fisclose();

} catch (IOException e) {

Systemoutprintln("客户端文件关闭出错");

}//catch (IOException e)

}//finally

}//public static void main(String[] args)

}//public class ClientSend

DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
网站模板库 » 如何在本机上利用java实现smtp邮件服务器

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情