一段javamail接收邮件的示例代码

javamail收邮件很麻烦。要作很多判断,如附件中文,附件存放等。这段代码不算完整。仅作参考。

    /**
     * 存放收件到系统中
     *
     * @param sess
     * @param pmm
     * @return
     */
    private boolean storeReceiveMail(Session sess, PlatMessageMailset pmm) throws Exception {
        Store store = null;
        POP3Folder folder = null;
        long size = 0;
        try {
            URLName url = new URLName("pop3", pmm.getPop3(), 110, "", pmm.getUsername(), pmm.getPassword());
            javax.mail.Session s = javax.mail.Session.getDefaultInstance(System.getProperties(), null);
            store = s.getStore(url);
            // if (folder == null) throw new Exception("No default folder");
            //如果是收件箱
            store.connect();
            folder = (POP3Folder) store.getFolder("INBOX");
            if (folder == null) throw new Exception("No POP3 INBOX");
            //使用只读方式打开收件箱
            folder.open(Folder.READ_WRITE);
            //得到文件夹信息,获取邮件列表
            FetchProfile profile = new FetchProfile();
            profile.add(UIDFolder.FetchProfileItem.UID);
            profile.add(FetchProfile.Item.ENVELOPE);
            Message[] msgs = folder.getMessages();
            folder.fetch(msgs, profile);
            for (int msgNum = 0; msgNum < msgs.length; msgNum++) {
                Message message = (msgs[msgNum]);
                if (!message.getFlags().contains(Flags.Flag.SEEN)) {
                    PlatMessage pm = new PlatMessage();
                    pm.setReceiver(pmm.getOwner());
                    pm.setRec_email(pmm.getMailaddr());
                    pm.setSend_date(message.getSentDate());
                    pm.setFolder("INBOX");
                    pm.setMsg_tag(2);
                    pm.setCreate_date(new Date());
                    pm.setIstag(0);
                    pm.setAcctag(0);
                    ///存放邮件
                    //获得发送邮件地址
                    String text = "";
                    String from = ((InternetAddress) message.getFrom()[0]).getPersonal();
                    //InternetAddress ia = new InternetAddress(from);
                    if (from == null) from = ((InternetAddress) message.getFrom()[0]).getAddress();
                    pm.setSender(from);
                    //获取主题
                    String subject = message.getSubject();
                    pm.setMsg_title(subject);
                    System.out.println("收取邮件,来自:" + from + "。主题:" + subject);
                    //获取信息对象
                    Part messagePart = message;
                    Object content = messagePart.getContent();
                    String acc_id = "";
                    System.out.println("content" + content);
                    if (content instanceof String) {
                        //附件
                        text = String.valueOf(content);
                        System.out.println("这儿" + text);
                    } else if (content instanceof Multipart) {
                        Multipart mp = ((Multipart) content);
                        for (int k = 0; k < mp.getCount(); k++) {
                            BodyPart bp = mp.getBodyPart(k);
                            Object t = bp.getContent();
                            if (t instanceof String) {
                                text = (String.valueOf(t));
                                System.out.println("这儿1" + text);
                            } else if (t instanceof InputStream) {
                                String physical = UUIDHex.getUUIDHex();
                                FileControl fc = new FileControl();
                                fc.setMyFile(new File(MESSAGE_ACC_PATH + "//" + physical));
                                fc.createFile();
                                fc.writeFile(bp.getInputStream());
                                PlatMsgAccessary pma = new PlatMsgAccessary();
                                pma.setFile_name(StringUtil.getString(MailUtil.decodeText(bp.getFileName()), "未知文件名"));
                                pma.setPhysical(physical);
                                pma.setFile_size(bp.getSize());
                                sess.save(pma);
                                acc_id += physical + "||";
                                System.out.println("收取附件,名称:" + MailUtil.decodeText(bp.getFileName()) + "。大小:" + bp.getSize());
                                size += bp.getSize();
                                pm.setAcctag(1);
                            }
                        }
                    }
                    pm.setAcc_id(acc_id);
                    /**
                     //获取content类型
                     String contentType = messagePart.getContentType();
                     //如果邮件内容是纯文本或者是HTML,那么打印出信息
                     String context = "";
                     if (contentType.startsWith("text/plain") ||
                     contentType.startsWith("text/html")) {
                     InputStream is = messagePart.getInputStream();
                     BufferedReader reader = new BufferedReader(new InputStreamReader(is));
                     String thisLine = reader.readLine();
                     context += thisLine;
                     while (thisLine != null) {
                     thisLine = reader.readLine();
                     context += thisLine;
                     }
                     size += context.length();
                     }
                     **/
                    pm.setMsg_size(message.getSize());
                    pm.setMsg_sys("SSEIP");
                    // pm.setMsg_text(context);
                    sess.save(pm);
                    sess.flush();
                    System.out.println("邮件正文:" + text);
                    saveMessageText(sess, pm.getMsg_id(), text);//
                    if (pmm.getDeltag() == 1) {
                        message.setFlag(Flags.Flag.DELETED, true);
                    } else {
                        message.setFlag(Flags.Flag.SEEN, true);
                    }
                }
                // folder.expunge();

                结束
            }
            return true;
        } catch (Exception ex) {
            throw ex;
        } finally {
            if (folder != null) {
                folder.close(true);
            }
            store.close();
        }
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值