javamail 发送mail,不多解释,看了就懂

来源:互联网 发布:不需要实名认证的域名 编辑:程序博客网 时间:2024/04/27 16:40
/* * 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)来接获真是长度,否则文件将被增加一些莫名其妙的空格。
原创粉丝点击