/* * RecieveMail.java * * Created on 2008.7.9, pm2:40 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */package mail;import javax.mail.*;import javax.mail.internet.*;import java.util.*;import java.io.*;/** * @author user * * この生成されたコメントの挿入されるテンプレートを変更するため * ウィンドウ > 設定 > Java > コード生成 > コードとコメント */public class RecieveMail { private String _popServer = ""; private String _popUser = ""; private String _popPassword = ""; public void getMails(){ try{ //recieve mail receive(); }catch (Exception ex){ Logger.println("Usage: java com.lotontech.mail.POPMail"+" popServer popUser popPassword"); } } private void receive(){ Store store=null; Folder folder=null; try{ //prepare to open mails pool Properties props = System.getProperties(); Session session = Session.getDefaultInstance(props, null); store = session.getStore("pop3"); store.connect(_popServer, _popUser, _popPassword); folder = store.getDefaultFolder(); if (folder == null) throw new Exception("No default folder"); folder = folder.getFolder("INBOX"); if (folder == null) throw new Exception("No POP3 INBOX"); //inbox folder //make it writeable folder.open(Folder.READ_WRITE); //array mails in msgs Message[] msgs = folder.getMessages(); for (int msgNum = 0; msgNum < msgs.length; msgNum++){ //read mail Logger.println("this the " + (msgNum + 1) + " mail in the server INBOX"); printMessage(msgs[msgNum]); checkMessage(msgs[msgNum]); //delete readen mail msgs[msgNum].setFlag(Flags.Flag.DELETED,true); } }catch (Exception ex){ Logger.println(ex.getMessage()); } finally{ try{ //set true to affirm the operation if (folder!=null) folder.close(true); if (store!=null) store.close(); }catch (Exception ex2) { Logger.println(ex2.getMessage()); } } } private void printMessage(Message message){ try{ Logger.println("mail info ------start------"); //from address String from=((InternetAddress)message.getFrom()[0]).getPersonal(); if (from==null) from=((InternetAddress)message.getFrom()[0]).getAddress(); Logger.println("FROM: "+from); //subject String subject=message.getSubject(); Logger.println("SUBJECT: "+subject); //headers String[] header=message.getHeader("X-IFArea"); if(header.length > 0) Logger.println("X-IFArea: "+header[0]); //content Part messagePart=message; Object content=messagePart.getContent(); if (content instanceof Multipart){ for(int m = 0; m < ((Multipart)content).getCount(); m++){ if(((Multipart) content).getBodyPart(m).getFileName() != null){ Logger.println("affix: "+((Multipart) content).getBodyPart(m).getFileName()); } } } Logger.println("mail info ------end------"); }catch (Exception ex){ Logger.println(ex.getMessage()); } } private void checkMessage(Message message){ try{ //subject String subject=message.getSubject(); //headers String[] header=message.getHeader("X-IFArea"); if(header.length < 1) throw new Exception("mail check error, there is no X-IFArea"); String x_IFArea = header[0]; //error reports List x_err_IFAreas = new ArrayList(); for(int i = 1; i <= 3; i++){ String[] error = message.getHeader("X-Ex" + i + "-IFArea"); if(error != null && error.length > 0) x_err_IFAreas.add("X-Ex" + i + "-IFArea"+error[0]); } //content Part messagePart=message; Object content=messagePart.getContent(); List files = new ArrayList(); if (content instanceof Multipart){ for(int fileNumber = 0; fileNumber < ((Multipart) content).getCount(); fileNumber++){ messagePart = ((Multipart)content).getBodyPart(fileNumber); if(messagePart.getFileName() == null) continue; BlobData data = new BlobData(); data.setBlobName(messagePart.getFileName()); data.setStream(messagePart.getInputStream()); files.add(data); } } //create TransmitIncepters to deal the message String className = ""; Property property = Property.getInstance(); // if(subject.equalsIgnoreCase(property.getProperty("titleRegist").trim())){ className = CONSTANT.mail_class_Regist; }else if(subject.equalsIgnoreCase(property.getProperty("titleDeleteRegist").trim())){ className = CONSTANT.mail_class_DeleteRegist; }else if(subject.equalsIgnoreCase(property.getProperty("titleAccept").trim())){ className = CONSTANT.mail_class_Accept; }else{ throw new Exception("wrong title, can not incept the mail to db"); } //desine for only get the name from subject string TransmitIncepter incepter = TransmitIncepter.getInstance(className); incepter.setSubject(subject); incepter.setX_IFArea(x_IFArea); incepter.setX_err_IFAreaList(x_err_IFAreas); incepter.setFileList(files); incepter.setSentDate(message.getSentDate()); incepter.run(); }catch (Exception ex){ Logger.println(ex.getMessage()); } } public void setPopServer(String popServer){ _popServer = popServer; } public void setPopUser(String popUser){ _popUser = popUser; } public void setPopPassword(String popPassword){ _popPassword = popPassword; }}/* * SendMail.java * * Created on 2008.7.9, am11:47 * * To change this template, choose Tools | Template Manager * and open the template in the editor. */package mail;import java.util.*;import javax.mail.*;import javax.mail.internet.*;import java.util.Date;import javax.activation.*;import oracle.sql.BLOB;import java.io.*;public class SendMail { private MimeMessage mimeMsg; private Session session; private Properties props; //プロパティ private boolean needAuth = false; //smtpのパスワード検証フラグ private String username = ""; //smtp認証名 private String password = ""; //smtp認証パスワード private Multipart mp; //Multipart対象,メール内容,表題,添付ファイルなどを含むMimeMessage対象 /** * * * */ public SendMail() { setSmtpHost(""); //サーバを設定しなければ、プロパティファイルから読取 createMimeMessage(); } public SendMail(String smtp) { setSmtpHost(smtp); createMimeMessage(); } /** * * @param hostName String * */ public void setSmtpHost(String hostName) { Logger.println("system property:mail.smtp.host = " + hostName); if (props == null) props = System.getProperties(); //プロパティファイル対象 props.put("mail.smtp.host", hostName); //SMTPサーバ名 } /** * * @return boolean * */ public boolean createMimeMessage() { try { Logger.println("prepare to read mail body object"); session = Session.getDefaultInstance(props, null); //メール会話対象 } catch (Exception e) { System.err.println("error ecured in getting mail body " + e); return false; } Logger.println("create mime mail body!"); try { mimeMsg = new MimeMessage(session); //mime対象生成 mp = new MimeMultipart(); return true; } catch (Exception e) { System.err.println("fail to create mime body" + e); return false; } } /** * * @param need boolean * */ public void setNeedAuth(boolean need) { Logger.println("config smtp auth:mail.smtp.auth = " + need); if (props == null) props = System.getProperties(); if (need) { props.put("mail.smtp.auth", "true"); } else { props.put("mail.smtp.auth", "false"); } } /** * * @param name String * * @param pass String * */ public void setNamePass(String name, String pass) { username = name; password = pass; } /** * * @param mailSubject String * * @return boolean * */ public boolean setSubject(String mailSubject) { Logger.println("config mail subject"); try { mimeMsg.setSubject(mailSubject); return true; } catch (Exception e) { System.err.println("fail to config mail subject"); return false; } } /** * * @param mailSubject String * * @return boolean * */ public boolean setHeader(String name, String context) { Logger.println("config mail header :" + name); try { mimeMsg.setHeader(name,context); return true; } catch (Exception e) { System.err.println("fail to config mail header"); return false; } } /** * * @param mailBody String * */ public boolean setBody(String mailBody) { try { BodyPart bp = new MimeBodyPart(); bp.setContent( "<meta http-equiv=Content-Type content=text/html; charset=iso-2022-jp>" + mailBody, "text/html;charset=iso-2022-jp"); mp.addBodyPart(bp); return true; } catch (Exception e) { System.err.println("config mail main body" + e); return false; } } public boolean addFileAffix(String filename,BLOB blob) { Logger.println("add file affix:" + filename); try { BodyPart bp = new MimeBodyPart(); BlobDataSource streamds = new BlobDataSource(filename,blob); bp.setDataHandler(new DataHandler(streamds)); bp.setFileName(streamds.getName()); bp.setHeader("Content-Transfer-Encoding","base64"); mp.addBodyPart(bp); return true; } catch (Exception e) { System.err.println("add file affix:" + filename + " error ecured" + e); return false; } } public boolean addFileAffix(String filename) { Logger.println("add file affix:" + filename); try { BodyPart bp = new MimeBodyPart(); FileDataSource fileds = new FileDataSource(filename); bp.setDataHandler(new DataHandler(fileds)); bp.setFileName(fileds.getName()); mp.addBodyPart(bp); return true; } catch (Exception e) { System.err.println("add file affix:" + filename + " error ecured" + e); return false; } } public boolean addFileAffix(BlobData[] blobs) { try { for(int i = 0; i < blobs.length; i++){ Logger.println("add file affix:" + blobs[i].getBlobName()); BodyPart bp = new MimeBodyPart(); BlobDataSource streamds = new BlobDataSource(blobs[i].getBlobName(),blobs[i].getBlob()); bp.setDataHandler(new DataHandler(streamds)); bp.setFileName(streamds.getName()); mp.addBodyPart(bp); } return true; } catch (Exception e) { System.err.println("add file affix, error ecured " + e); return false; } } /** * * @param name String * * @param pass String * */ public boolean setFrom(String from) { Logger.println("set fromer!"); try { mimeMsg.setFrom(new InternetAddress(from)); //送信メールアドレス設定 return true; } catch (Exception e) { return false; } } /** * * @param name String * * @param pass String * */ public boolean setTo(String to) { if (to == null) return false; try { mimeMsg.setRecipients( Message.RecipientType.TO, InternetAddress.parse(to)); return true; } catch (Exception e) { return false; } } /** * * @param name String * * @param pass String * */ public boolean setCopyTo(String copyto) { if (copyto == null) return false; try { mimeMsg.setRecipients( Message.RecipientType.CC, (Address[]) InternetAddress.parse(copyto)); return true; } catch (Exception e) { return false; } } /** * * @param name String * * @param pass String * */ public boolean sendout() { try { mimeMsg.setContent(mp); mimeMsg.saveChanges(); Logger.println("sending mail...."); Session mailSession = Session.getInstance(props, null); Transport transport = mailSession.getTransport("smtp"); transport.connect( (String) props.get("mail.smtp.host"), username, password); transport.sendMessage( mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO)); //transport.send(mimeMsg); Logger.println("sending mail succeed!"); transport.close(); return true; } catch (Exception e) { System.err.println("Fail to send mail!" + e); return false; } }}
在接受mail附件的时候,适用的是输入流,这里,容易产生多余的东西,在读取输入流时,最好使用while((int = in.read()) != -1)来接获真是长度,否则文件将被增加一些莫名其妙的空格。