基于java的简易邮件收发软件

大二下半学期的作品,因为大二下课程多(有七八门),做的比较赶,还请见谅。

发送邮件主要使用的是 java.net.Socket 包, 而接收邮件则是用javax.mail 包,界面使用的是WindowBuilder制作

SMTP.java

package Mail;
import java.io.BufferedReader;
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.ConnectException; 
import java.net.Socket;
import java.io.InputStream;
import java.io.OutputStream;

import javax.swing.JOptionPane;

import Decoder.BASE64Encoder;

public class SMTP {
	public static void postMail() {   
	//public static void main(String[] args) {
		//
		
        String sender = Basic.user;   
        String receiver=SMTPtemp.receiver;
        String content=SMTPtemp.content;
        String subject=SMTPtemp.subject;
        String password = Basic.pass;   
        String server=Server.smtp;
        int sport=Server.sport;
        
		
        String user = new BASE64Encoder().encode(sender.substring(0, sender.indexOf("@")).getBytes());   
        String pass = new BASE64Encoder().encode(password.getBytes());  
        String message="";
        try {   
            Socket socket = new Socket(server, sport);   
            InputStream inputStream = socket.getInputStream();   
            OutputStream outputStream = socket.getOutputStream();   
            BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));   
            PrintWriter writter = new PrintWriter(outputStream, true); 
            
            message=reader.readLine();
            //System.out.println(message);   
            //HELO   
            writter.println("HELO huan");   
            message=reader.readLine();
            //System.out.println(message);   
            //AUTH LOGIN   
            writter.println("auth login");   
            message=reader.readLine();
          //System.out.println(message);    
            writter.println(user);   
            message=reader.readLine();
            //System.out.println(message);   
            writter.println(pass);   
            message=reader.readLine();
           //System.out.println(message);   
            //Above   Authentication successful <pre name="code" class="java">              
            writter.println("mail from:<" + sender +">");   
            message=reader.readLine();
            //System.out.println(message);  
            writter.println("rcpt to:<" + receiver +">");   
            message=reader.readLine();
            //System.out.println(message);   
             
            //Set data   
            writter.println("data");   
            message=reader.readLine();
            //System.out.println(message);   
            writter.println("subject:"+subject);   
            writter.println("from:" + sender);   
            writter.println("to:" + receiver);   
            writter.println("Content-Type: text/plain;charset=\"gb2312\"");   
            writter.println();   
            writter.println(content);   
            writter.println(".");   
            writter.println("");   
            message=reader.readLine();
           // System.out.println(message);    
    
            //Say GoodBye  
            writter.println("rset");   
            message=reader.readLine();
            //System.out.println(message);    
            writter.println("quit");   
            message=reader.readLine();
           // System.out.println(message);    
            socket.close();
            JOptionPane.showMessageDialog(null,"发送成功");
            } catch (Exception e) {  
            	JOptionPane.showMessageDialog(null, "失败"+message, "发送错误", JOptionPane.ERROR_MESSAGE); 
            	
            	 e.printStackTrace(); 
           }   
        }   
}

POP3.java

package Mail;

import java.io.FileOutputStream;  
import java.io.InputStream;  
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;  

import javax.mail.BodyPart;  
import javax.mail.Folder;  
import javax.mail.Message;  
import javax.mail.Multipart;  
import javax.mail.Part;  
import javax.mail.Session;  
import javax.mail.Store;  
public class POP3 {  
 /** 
  * 获取邮件内容 
  * @param args 
  * @throws Exception  
  */  
 static String server=Server.pop3;  
 static String password = Basic.pass;
 static String user = Basic.user;   
 static String[] title3={"序号","发件人","主题","日期"};
 static String content="";
 int sport=Server.sport;
 //获取邮件头
 public static String[][] POP3Title() throws Exception {  
	 
  Properties props=new Properties();  
  //设置邮件接收协议为pop3  
  props.setProperty("mail.store.protocol", "pop3");  
  props.setProperty("mail.pop3.host", server);  
    
  Session session = Session.getInstance(props);  
  Store store = session.getStore("pop3");  
  //连接要获取数据的邮箱 主机+用户名+密码  
  store.connect(server, user, password);  
  Folder folder = store.getFolder("inbox");  
  //设置邮件可读可写  
  folder.open(Folder.READ_WRITE);  
   // int a;
  Message[] messages = folder.getMessages();  
  String[][] content=new String[messages.length][title3.length];
  //a=messages.length;
  //
  for (int i = 0; i < messages.length; i++) {  
	  content[i][0]=String.valueOf(i+1);
	  
	  //解析发件人地址
   String temp = messages[i].getFrom()[0].toString();  
   String address="";
   if(temp.contains("<"))
   {
	   address=temp.substring(address.indexOf("<")+1,address.indexOf(">")+1);
   }
   else
   {
	   address=temp;
   }
   content[i][1]=temp;
   
   //解析邮件主题  
   String subject = messages[i].getSubject();  
   content[i][2]=subject;

   
   //获取时间
   String date=(new SimpleDateFormat("yyy-MM-dd")).format(messages[i].getSentDate());
   content[i][3]=date;
 //解析综合数据情况
   
  }  
  folder.close(true);  
  store.close();  

  return content;
    
 }  
 
 //获取邮件内容 
 public static String POP3Content(String id) throws Exception {  
	 
	  Properties props=new Properties();  
	  //设置邮件接收协议为pop3  
	  props.setProperty("mail.store.protocol", "pop3");  
	  props.setProperty("mail.pop3.host", server);  
	    
	  Session session = Session.getInstance(props);  
	  Store store = session.getStore("pop3");  
	  //连接要获取数据的邮箱 主机+用户名+密码  
	  store.connect(server, user, password);  
	  Folder folder = store.getFolder("inbox");  
	  //设置邮件可读可写  
	  folder.open(Folder.READ_WRITE);  
	    
	  Message[] messages = folder.getMessages();  
	    
	   int i=Integer.parseInt(id);

	   getAllMultipart(messages[i]);  ///////////////
	 
	  folder.close(true);  
	  store.close();  
	  return content; 
	 } 
 /** 
  * 解析综合数据 
  * @param part 
  * @throws Exception 
  */  
 private static void getAllMultipart(Part part) throws Exception{  ////////////
  String contentType = part.getContentType();  
  int index = contentType.indexOf("name");  
  
  boolean conName = false;  
  if(index!=-1){  
   conName=true;  
  }  
  //判断part类型  
  if(part.isMimeType("text/plain") && ! conName) {  
	  content+=(String) part.getContent();
   //System.out.println((String) part.getContent());  
  }else if (part.isMimeType("text/html") && ! conName) {  
	  content+=(String) part.getContent(); 
   //System.out.println((String) part.getContent());  
  }else if (part.isMimeType("multipart/*")) {  
   Multipart multipart = (Multipart) part.getContent();  
   int counts = multipart.getCount();  
   for (int i = 0; i < counts; i++) {  
    //递归获取数据  
    getAllMultipart(multipart.getBodyPart(i));  
    //附件可能是截图或上传的(图片或其他数据)  
    if (multipart.getBodyPart(i).getDisposition() != null) {  
     //附件为截图  
     if (multipart.getBodyPart(i).isMimeType("image/*")) {  
      InputStream is = multipart.getBodyPart(i)  
        .getInputStream();  
      String name = multipart.getBodyPart(i).getFileName();  
      String fileName;  
      //截图图片  
      if(name.startsWith("=?")){  
       fileName = name.substring(name.lastIndexOf(".") - 1,name.lastIndexOf("?="));  
      }else{  
       //上传图片  
       fileName = name;  
      }  
       
      FileOutputStream fos = new FileOutputStream("D:\\"  
        + fileName);  
      int len = 0;  
      byte[] bys = new byte[1024];  
      while ((len = is.read(bys)) != -1) {  
       fos.write(bys,0,len);  
      }  
      fos.close();  
     } else {  
      //其他附件  
      InputStream is = multipart.getBodyPart(i)  
        .getInputStream();  
      String name = multipart.getBodyPart(i).getFileName();  
      FileOutputStream fos = new FileOutputStream("D:\\"  
        + name);  
      int len = 0;  
      byte[] bys = new byte[1024];  
      while ((len = is.read(bys)) != -1) {  
       fos.write(bys,0,len);  
      }  
      fos.close();  
     }  
    }  
   }  
  }else if (part.isMimeType("message/rfc822")) {  
   getAllMultipart((Part) part.getContent());  
  }   
 }  
   
 
}

猜你喜欢

转载自blog.csdn.net/SeptDays/article/details/82261303