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

📄 sendmail.java

📁 邮件客户端源代码java版
💻 JAVA
字号:
/*
   
   这个类主要是以Telnet的方式发送命令和邮件

*/
import java.io.*;
import sun.misc.BASE64Encoder;

import java.net.*;

import java.util.*;

public class SendMail{
	
	private Socket mailSocket;

	private BufferedReader recv;

	private  DataOutputStream send;

	private String from;

	private String to;
	
	private String domainFrom;

	private String domainTo;
	
	private String data;
	
	private String subject;
	
	private String userFrom;
	
	private String userTo;
	
	private String servername;
	
	
	//解析发件人的Email地址
	public void setFrom(String mailFrom)
	{
        from=mailFrom;
        
        int i=from.indexOf("@");
        
        userFrom=from.substring(0,i-1);
        
        domainFrom=from.substring(i+1,from.length());
        
	}
	public String getFrom(){
		return userFrom;
	}
	
	//解析收件人的Email地址
	public void setTo(String mailFrom)
	{
        to=mailFrom;
        
        int i=from.indexOf("@");
        
        userTo=from.substring(0,i-1);
        
        domainTo=from.substring(i+1,from.length());
        
	}
	
	//获得邮件服务器域名
	public String getservername()
	{
	
	  servername="smtp."+domainFrom;
	  
	  return servername;
	
	}
	
	//把邮件的内容传给data
	public void setData(String data)
	{
		this.data=data;
	}
	
	//把邮件的主题传给subject
	public void setSubject(String subject)
	{
		this.subject=subject;
	}
	
	
	//创建一个套接字和两个连接到套接字的流对象
	public int createSocket(String serverName, int port){

		try{

		mailSocket = new Socket(serverName, port);

		recv = new BufferedReader(new InputStreamReader(mailSocket.getInputStream()));

	    send = new DataOutputStream(mailSocket.getOutputStream());
 
		String s1 = recv.readLine();

		char c = s1.charAt(0);

		if((c == '4') | (c == '5'))

		return 0;

		}

		catch(Exception e){

		return 0;

		}

		return 1;

		}

	
		
	//使用telnet登录方式传送邮件
	public int transmit(String loginName, String loginPassword){		
		
		try{ 	
		
			//发送HELO 命令
			/*
			if(domainFrom.length() != 0){
	
					
				if(sendString("HELO " + domainFrom +"\r\n")!= 1)
					
				return 0;
			}
			*/
		
		
			//发送EHLO命令
		
			if(domainFrom.length() != 0){
	
					
				if(sendString("EHLO "+ domainFrom+"\r\n")!= 1)
	
				return 0;
				
			}
			
            //发送auth login命令
			
			if(sendString("auth login"+"\r\n") != 1)
				return 0;
							
				
			if(sendString(getBase64(loginName)+"\r\n") != 1)
				return 0;
		
	
			if(sendString(getBase64(loginPassword)+"\r\n")!= 1)
				return 0;	
							
			
	  		//发送MAIL FROM 命令(发件人)
	
			if(from.length() != 0){
				
				if(sendString("MAIL FROM:<"+from+">\r\n")!= 1)
		
					return 0;
				
				
			}
		
			//发送RCPT TO 命令(收件人)
		
			if(to.length() != 0){
				
				if(sendString("RCPT TO:<"+to+">\r\n") != 1)
		
					return 0;
					
			}
		
			//发送邮件正文(DATA 命令)
		
			if(sendString("DATA"+"\r\n") != 1)
		
				return 0;
				
				
			send.writeBytes("From:"+from+"\r\n");                 // 开
		        
			send.writeBytes("To: "+to+"\r\n");                    // 始
		        
			send.writeBytes("Subject: "+subject+"\r\n");          // 邮
		        
		    send.writeBytes("mime-version: 1.0\r\n");             // 件
		    
		    send.writeBytes("Content-Type: text/html;\r\n");      // 发                             
		
		    send.writeBytes("Content-Transfer-Encoding: Base64"); // 送
		   	     
		    send.writeBytes("\r\n\r\n");						  //
		   	     
		    send.writeBytes(getBase64(data));                     //
		   	     
		    send.writeBytes("\r\n\r\n");                          //                           
		
		   	    
		    if(sendString("\r\n.\r\n") != 1)
		        	return 0;
		    else  System.out.println("邮件成功发送");
		        	
   	     
  		}
		
		catch(Exception e){ 
				
			System.out.println("There is an exception.");
		}
		
				
		return 1;
		
	}
	
	//发送telnet命令并接收返回命令
	private int sendString(String s){

		String s1 = "";

		try{

		send.writeBytes(s);

		s1 = recv.readLine();

		}

		catch(Exception e){

		System.out.print("There is an exception");

		return 0;

		}
    
		if(s1.length()==0) return 0;

		char c = s1.charAt(0);

		return !((c == '4') | (c == '5')) ? 1 : 0;

	}
	
	
	//生成Base64编码
	private String getBase64(String str)
    {
        return (new BASE64Encoder().encode(str.getBytes()));
    }  
	
	
	//退出TCP连接并关闭两个流和套接字
	public int close(){
		
		int i = 0;

		try{

		send.writeBytes("QUIT");
	
		send.close();
		recv.close();
		mailSocket.close();
		

		}

		catch(Exception e){

		return 0;

		}

		return i == 0 ? 1 : 0;

		}

	
	
	


}

⌨️ 快捷键说明

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