⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 response.java

📁 Email客户端的源代码!希望对你有帮助
💻 JAVA
字号:
package SmtpServer;import java.net.Socket;import java.io.OutputStream;import java.io.InputStream;import java.io.IOException;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.File;import java.sql.*;import java.util.ArrayList; public class Response {  	OutputStream output;  	InputStream input;  	Request request;	public static final int WELCOME = 101;		//send welcome message	public static final int ERROR = -1;		private String curUser = new String();  	public Response(OutputStream output, InputStream input) {    	this.output = output;    	this.input = input;  	}  	public void setRequest(Request rq) {  		request = rq;  	}	public boolean sendEventMsg(int evt) throws IOException {		try {			switch(evt) {				case WELCOME : 					sendMsg("220 My Simple Mail Transfer Service Ready");					break;				case Request.HELO :					sendMsg("250 MySMTP");					break;				case Request.SEND_AND_MAIL:					case Request.SEND:						sendMsg("450 ");				case Request.SEND_OR_MAIL:					case Request.MAIL:						sendMsg("250 OK ");					break;				case Request.RECIPIENT:						if (getDomain(request.getForwardPath()).equals(SmtpServer.domain)) 						if (verify(request.getUser())) 							{								curUser = request.getUser();								sendMsg("250 OK ");								break;							}					sendMsg("550 No such user here.");										break;									case Request.VERIFY:					if (verify(request.getString()))						sendMsg("250 " + request.getString() + " <" + request.getString() + "@MySMTP>");					else						sendMsg("550 String does not match anything.");					break;				case Request.DATA:					if (!curUser.equals("")){ 						sendMsg("354 ok, send it; end with <CRLF>.<CRLF>");						getMail();						sendMsg("250 OK");											}					else						sendMsg("550 send to nobody");					break;				case Request.RESET:					sendMsg("250 OK");					break;				case Request.EXPAND :					sendMsg("550 Access Denied to You.");					break;				case Request.TURN :					sendMsg("502 TURN command refused.");					break;				case Request.HELP :					sendMsg("550 'HELP' command not supported.");					break;				case Request.NOOP:					sendMsg("200 NOOP command successful.");					break;				case Request.QUIT:					request.clear();					curUser = "";					sendMsg("221 MySTMP Service closing transmission channel");					break;				default :					sendMsg("500 '" + request.getRequestCmd() + "': command not understood.");					break;			}			return true;		}		catch (Exception e) {			System.out.println(e.toString() );			return false;		}	}	//send response message  	public void sendMsg(String sendMsg) throws IOException {  		sendMsg += "\r\n";	    try {			output.write(sendMsg.getBytes(), 0, sendMsg.length());			System.out.println(sendMsg);		}    	catch (Exception e) {      		System.out.println(e.toString() );    	}  	}  	  	private String getDomain(String forwardPath) {	//取得域  		String domain = new String();  		int index = forwardPath.indexOf('@');  		if (index < 0) domain = "";  		else domain = forwardPath.substring(index+1,forwardPath.length());  		  		return domain;  	}  	  	private boolean verify(String user) {	//检查是否存在这个用户  		boolean userExist;		Connection sqlCon;		PreparedStatement sqlStmt;				try {			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");				sqlCon = DriverManager.getConnection("jdbc:odbc:mailServer");			sqlStmt = sqlCon.prepareStatement("select * from userinfo where name=?");			sqlStmt.setString(1,user);						ResultSet rs = sqlStmt.executeQuery();			if(rs.next())				userExist = true;			else userExist = false;		} catch (Exception e) {       		e.printStackTrace();       		userExist = false;		}		return userExist; 		  	}  	  	private void getMail() {	//读取mail内容并存入文件(mail内容以"\r\n.\r\n"结束)  		int BUFFER_SIZE = 1024;  		try {		    byte[] bytes = new byte[BUFFER_SIZE];		    FileOutputStream fos = null;		    try {		    	File file = new File(SmtpServer.rootDir + File.separator + request.getUser(), request.getReversePath());	      		for(int i=0;file.exists() ;i++)	      			file = new File(SmtpServer.rootDir + File.separator + request.getUser(), request.getReversePath() + String.valueOf(i));	      		file.createNewFile();	      		fos = new FileOutputStream(file);					    		int ch = input.read(bytes, 0, BUFFER_SIZE);	    		while (ch!=-1) {	    			if (isEnd(bytes,ch)) {	    				if (ch >=5 ) fos.write(bytes, 0, ch-5);	    				break;	    			}	    			fos.write(bytes, 0, ch);	      			ch = input.read(bytes, 0, BUFFER_SIZE);	    		}	    	}	    	catch (Exception e) {	      		// thrown if cannot instantiate a File object	      		System.out.println(e.toString() );	    	}	    	finally {	      		if (fos!=null)	        	fos.close();	    	}		}catch(Exception e)		{      		System.out.println(e.toString() );		}  	}  	  	private boolean isEnd(byte[] bytes,int size) {	//判断末尾是否为"\r\n.\r\n"  		if (size == 3)  			if (bytes[0] == ',' && bytes[1] == 13 && bytes[2] == 10)  			{  				System.out.println("end");  				return true;  			}  		if (size>=5)  			if (bytes[size-5] == 13 && bytes[size-4] == 10 && bytes[size-3] == '.' && bytes[size-2] == 13 && bytes[size-1] == 10)  			{  				System.out.println("end");  				return true;  			}  		return false;  	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -