Java邮件收发,以及获取收件箱和发件箱 自测可用 使用JavaMail

Java邮件收发,以及获取收件箱和发件箱 自测可用

Java发送邮件 使用javaMail 1.5.6发送邮件 协议smtp

smtp地址 smtp.域名 端口SSL 465/994 非SSL25
实体类

**
 * 邮件消息体
 * @author lyp
 * @date 2020年3月11日 上午10:53:13 
 * @see [相关类/方法]
 */
public class MessageBody {
    
    public enum MessageType
    {
        MAIL, SMS
    }
    
    /** 邮件主题 */
    private String subject;
    
    /** 邮件发件人 */
    private String fromUser;
    
    // 短信则为手机号码,邮件则为邮箱
    private List<String> receiveUsers;
    
    /** 邮件抄送人 */
    private List<String> copyToUsers;
    
    /** 邮件密送人 */
    private List<String> bccUsers;
    
    // 邮件短信内容
    private String content;
    
    // 定时发送用
    private DateTime dateTime;
    
    // 消息类型, 默认为邮箱
    private MessageType messageType = MessageType.MAIL;
    
    // 公司名称
    private String companyName;
    
    // 附件
    private Map<String, File> attachments;

    private Map<String, MultipartFile> multipartFileMap;

    public List<Integer> getSendIds() {
        return sendIds;
    }

    public void setSendIds(List<Integer> sendIds) {
        this.sendIds = sendIds;
    }

    private List<Integer> sendIds;


    public Map<String, MultipartFile> getMultipartFileMap() {
        return multipartFileMap;
    }

    public void setMultipartFileMap(Map<String, MultipartFile> multipartFileMap) {
        this.multipartFileMap = multipartFileMap;
    }

    public List<String> getReceiveUsers() {
        return receiveUsers;
    }
    
    public void setReceiveUsers(List<String> receiveUsers) {
        this.receiveUsers = receiveUsers;
    }
    
    public String getContent() {
        return content;
    }
    
    public void setContent(String content) {
        this.content = content;
    }
    
    public DateTime getDateTime() {
        return dateTime;
    }
    
    public void setDateTime(DateTime dateTime) {
        this.dateTime = dateTime;
    }
    
    public MessageType getMessageType() {
        return messageType;
    }
    
    public void setMessageType(MessageType messageType) {
        this.messageType = messageType;
    }
    
    public String getCompanyName() {
        return companyName;
    }
    
    public void setCompanyName(String companyName) {
        this.companyName = companyName;
    }
    
    public String getSubject() {
        return subject;
    }
    
    public void setSubject(String subject) {
        this.subject = subject;
    }
    
    public String getFromUser() {
        return fromUser;
    }
    
    public void setFromUser(String fromUser) {
        this.fromUser = fromUser;
    }
    
    public List<String> getCopyToUsers() {
        return copyToUsers;
    }
    
    public void setCopyToUsers(List<String> copyToUsers) {
        this.copyToUsers = copyToUsers;
    }
    
    public List<String> getBccUsers() {
        return bccUsers;
    }
    
    public void setBccUsers(List<String> bccUsers) {
        this.bccUsers = bccUsers;
    }
    
    public Map<String, File> getAttachments() {
        return attachments;
    }
    
    public void setAttachments(Map<String, File> attachments) {
        this.attachments = attachments;
    }
    
}

JavaMailSenderImpl sender = new JavaMailSenderImpl();
        sender.setHost(emailPO.getSmtp());  //设置smtp地址
        sender.setPassword(emailPO.getPassword());  //邮箱授权密码
        sender.setPort(emailPO.getSmtpPort());	//smtp端口  465/994
        sender.setUsername(emailPO.getEmail()); //邮箱
        Properties properties = new Properties(); 
        properties.put("mail.smtp.auth", true); //开启授权认证
        MailSSLSocketFactory sf = null; //开启ssl加密方式链接
        try {
            sf = new MailSSLSocketFactory();
        } catch (GeneralSecurityException e) {
            LOGGER.error("failed to init MailSSLSocketFactory,err:{}", e);
            throw new IllegalArgumentException(e);
        }
        sf.setTrustAllHosts(true);
        properties.put("mail.smtp.ssl.enable", "true");
        properties.put("mail.smtp.ssl.socketFactory", sf);
        sender.setJavaMailProperties(properties);
        LOGGER.info("mail message:{}", message);
        mailSenderService.run(sender,message);
public class MailSender {

    /** 邮件发送器 */
    private JavaMailSender mailSender;
    
    /** 邮件消息 */
    private MessageBody mailMessage;
    
    /** 日志记录器 */
    private static final Logger LOGGER = LoggerFactory.getLogger(MailSender.class);
    
    public MailSender(JavaMailSenderImpl mailSender, MessageBody mailMessage)
    {
        this.mailSender = mailSender;
        this.mailMessage = mailMessage;
    }
    
    @Override
    public void run(JavaMailSenderImpl mailSender, MessageBody mailMessage) {
        if (null != mailMessage) {
            LOGGER.info("mailSender:{}", mailSender);
            MimeMessage mimeMsg = mailSender.createMimeMessage();
            try {
                // 设置true,表示支持附件
                MimeMessageHelper msgHelper = new MimeMessageHelper(mimeMsg, true, "UTF-8");
                msgHelper.setValidateAddresses(true);
                msgHelper.setFrom(mailMessage.getFromUser(), mailMessage.getCompanyName());
                msgHelper.setSubject(mailMessage.getSubject());
                String[] receiveUsers = new String[mailMessage.getReceiveUsers().size()];
                //设置收件人
                msgHelper.setTo(mailMessage.getReceiveUsers().toArray(receiveUsers));
                //设置内容  ,第二个参数支持html格式
                msgHelper.setText(mailMessage.getContent(), true);
                // 设置邮件抄送人
                if (CollectionUtils.isNotEmpty(mailMessage.getCopyToUsers())) {
                    String[] copyToUsers = new String[mailMessage.getCopyToUsers().size()];
                    msgHelper.setCc(mailMessage.getCopyToUsers().toArray(copyToUsers));
                }
                // 设置邮件密送人
                if (CollectionUtils.isNotEmpty(mailMessage.getBccUsers())) {
                    String[] bccUsers = new String[mailMessage.getBccUsers().size()];
                    msgHelper.setBcc(mailMessage.getBccUsers().toArray(bccUsers));
                }
                // 添加附件
                if (null != mailMessage.getAttachments() && mailMessage.getAttachments().size() > 0) {
                    Set<Entry<String, File>> it = mailMessage.getAttachments().entrySet();
                    for (Entry<String, File> attachment : it) {
                        msgHelper.addAttachment(attachment.getKey(), attachment.getValue());
                    }
                }

                LOGGER.info("sending mail message begin:{}", msgHelper);
                mailSender.send(mimeMsg);
                LOGGER.info("send mail message end.");
            } catch (Exception e) {
                LOGGER.error("Send mail failed. Error message : {}", e.getMessage());
            }
        }
    }
}

Java Mail 获取收件箱 使用pop3协议

Java Mail 获取发件箱 使用imap协议

POP3协议 地址pop.域名 ssl端口号995 非ssl端口号110
IMAP协议 地址imap.域名 ssl端口号993 非ssl端口号143
这里使用的是非ssl端口号

/**
 * 有一封邮件就需要建立一个ReciveMail对象
 */
public class ReciveMail {
    private MimeMessage mimeMessage = null;
    private final String dateformat = "yyyy-MM-dd HH:mm:ss"; //默认的日前显示格式


    private String saveAttachPath; //附件下载后的存放目录
    private String host;   
    private int port;      //收件服务器  pop3端口
    private String file;
    private String username;   //邮箱账户
    private String password;   //授权的密码
    private String popHost;   //pop3的host

    private StringBuffer bodytext = new StringBuffer();//存放邮件内容

    private String content;

    public ReciveMail() {
    }

    public ReciveMail(MimeMessage mimeMessage) {
        this.mimeMessage = mimeMessage;
    }

    /**
     * 获得发件人的地址和姓名
     */
    public String getFrom() throws Exception {
        InternetAddress address[] = (InternetAddress[]) mimeMessage.getFrom();
        String from = address[0].getAddress();
        if (from == null)
            from = "";
        String personal = address[0].getPersonal();
        if (personal == null)
            personal = "";
        String fromaddr = personal + "<" + from + ">";
        return fromaddr;
    }

    /**
     * 获得邮件的收件人,抄送,和密送的地址和姓名,根据所传递的参数的不同 "to"----收件人 "cc"---抄送人地址 "bcc"---密送人地址
     */
    public String getMailAddress(String type) throws Exception {
        String mailaddr = "";
        String addtype = type.toUpperCase();
        InternetAddress[] address = null;
        if (addtype.equals("TO") || addtype.equals("CC") || addtype.equals("BCC")) {
            if (addtype.equals("TO")) {
                address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.TO);
            } else if (addtype.equals("CC")) {
                address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.CC);
            } else {
                address = (InternetAddress[]) mimeMessage.getRecipients(Message.RecipientType.BCC);
            }
            if (address != null) {
                for (int i = 0; i < address.length; i++) {
                    String email = address[i].getAddress();
                    if (email == null)
                        email = "";
                    else {
                        email = MimeUtility.decodeText(email);
                    }
                    String personal = address[i].getPersonal();
                    if (personal == null)
                        personal = "";
                    else {
                        personal = MimeUtility.decodeText(personal);
                    }
                    String compositeto = personal + "<" + email + ">";
                    mailaddr += "," + compositeto;
                }
                mailaddr = mailaddr.substring(1);
            }
        } else {
            throw new Exception("Error emailaddr type!");
        }
        return mailaddr;
    }

    /**
     * 获得邮件主题
     */
    public String getSubject() throws MessagingException {
        String subject = "";
        try {
            subject = MimeUtility.decodeText(mimeMessage.getSubject());
            if (subject == null)
                subject = "";
        } catch (Exception exce) {
        }
        return subject;
    }

    /**
     * 判断此邮件是否需要回执,如果需要回执返回"true",否则返回"false"
     */
    public boolean getReplySign() throws MessagingException {
        boolean replysign = false;
        String needreply[] = mimeMessage
                .getHeader("Disposition-Notification-To");
        if (needreply != null) {
            replysign = true;
        }
        return replysign;
    }

    /**
     * 获得此邮件的Message-ID
     */
    public String getMessageId() throws MessagingException {
        return mimeMessage.getMessageID();
    }

    /**
     * 【判断此邮件是否已读,如果未读返回返回false,反之返回true】
     */
    public boolean isNew() throws MessagingException {
        boolean isnew = false;
        Flags flags = ((Message) mimeMessage).getFlags();
        Flags.Flag[] flag = flags.getSystemFlags();
        System.out.println("flags's length: " + flag.length);
        for (int i = 0; i < flag.length; i++) {
            if (flag[i] == Flags.Flag.SEEN) {
                isnew = true;
                System.out.println("seen Message.......");
                break;
            }
        }
        return isnew;
    }

    /**
     * 获得邮件发送日期
     */
    public String getSentDate() throws Exception {
        Date sentdate = mimeMessage.getSentDate();
        SimpleDateFormat format = new SimpleDateFormat(dateformat);
        return format.format(sentdate);
    }

    public MimeMessage getMimeMessage() {
        return mimeMessage;
    }

    public void setMimeMessage(MimeMessage mimeMessage) {
        this.mimeMessage = mimeMessage;
    }

    public StringBuffer getBodytext() {
        return bodytext;
    }

    public void setBodytext(StringBuffer bodytext) {
        this.bodytext = bodytext;
    }

    public String getPopHost() {
        return popHost;
    }

    public void setPopHost(String popHost) {
        this.popHost = popHost;
    }

    public String getHost() {
        return host;
    }

    public void setHost(String host) {
        this.host = host;
    }

    public int getPort() {
        return port;
    }

    public void setPort(int port) {
        this.port = port;
    }

    public String getFile() {
        return file;
    }

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public void setFile(String file) {
        this.file = file;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    /**
     * 【设置附件存放路径】
     */
    public void setAttachPath(String attachpath) {
        this.saveAttachPath = attachpath;
    }

    /**
     * 获得邮件正文内容
     */
    public String getBodyText() {
        return bodytext.toString();
    }

    /**
     * 【获得附件存放路径】
     */
    public String getAttachPath() {
        return saveAttachPath;
    }
}

public class GetMailService {

    private StringBuffer bodytext = new StringBuffer();//存放邮件内容

    public GetMailService() {
    }

    private static GetMailService reciveMailUtil;


    /**
     *
     * @return
     */
    public static GetMailService getInstance() {
        if (reciveMailUtil == null) {
            synchronized (GetMailService.class) {
                if (reciveMailUtil == null) {
                    reciveMailUtil = new GetMailService();
                }
            }
        }
        return reciveMailUtil;
    }

    /**
     * 解析邮件,把得到的邮件内容保存到一个StringBuffer对象中,解析邮件 主要是根据MimeType类型的不同执行不同的操作,一步一步的解析
     */
    public void getMailContent(Part part, ReciveMail reciveMail) throws Exception {
        String contenttype = part.getContentType();
        int nameindex = contenttype.indexOf("name");
        boolean conname = false;
        if (nameindex != -1) {
            conname = true;
        }
        System.out.println("CONTENTTYPE: " + contenttype);
        if (part.isMimeType("text/plain") && !conname) {
            bodytext.append((String) part.getContent());
            reciveMail.setBodytext(bodytext);
        } else if (part.isMimeType("text/html") && !conname) {
            bodytext.append((String) part.getContent());
            reciveMail.setBodytext(bodytext);
        } else if (part.isMimeType("multipart/*")) {
            Multipart multipart = (Multipart) part.getContent();
            int counts = multipart.getCount();
            for (int i = 0; i < counts; i++) {
                getMailContent(multipart.getBodyPart(i), reciveMail);
            }
        } else if (part.isMimeType("message/rfc822")) {
            getMailContent((Part) part.getContent(), reciveMail);
        } else {
        }
    }
    /**
     * 判断此邮件是否包含附件
     */
    public boolean isContainAttach(Part part) throws Exception {
        boolean attachflag = false;
        String contentType = part.getContentType();
        if (part.isMimeType("multipart/*")) {
            Multipart mp = (Multipart) part.getContent();
            for (int i = 0; i < mp.getCount(); i++) {
                BodyPart mpart = mp.getBodyPart(i);
                String disposition = mpart.getDisposition();
                if ((disposition != null)
                        && ((disposition.equals(Part.ATTACHMENT)) || (disposition
                        .equals(Part.INLINE)))) {
                    attachflag = true;
                }
                else if (mpart.isMimeType("multipart/*")) {
                    attachflag = isContainAttach((Part) mpart);
                } else {
                    String contype = mpart.getContentType();
                    if (contype.toLowerCase().indexOf("application") != -1){
                        attachflag = true;}
                    if (contype.toLowerCase().indexOf("name") != -1){
                        attachflag = true;}
                }
            }
        } else if (part.isMimeType("message/rfc822")) {
            attachflag = isContainAttach((Part) part.getContent());
        }
        return attachflag;
    }
    /**
     * 【保存附件】
     */
    public void saveAttachMent(Part part, ReciveMail reciveMail) throws Exception {
        String fileName = "";
        if (part.isMimeType("multipart/*")) {
            Multipart mp = (Multipart) part.getContent();
            for (int i = 0; i < mp.getCount(); i++) {
                BodyPart mpart = mp.getBodyPart(i);
                String disposition = mpart.getDisposition();
                if ((disposition != null)
                        && ((disposition.equals(Part.ATTACHMENT)) || (disposition
                        .equals(Part.INLINE)))) {
                    fileName = mpart.getFileName();
                    if (fileName.toLowerCase().indexOf("gb2312") != -1) {
                        fileName = MimeUtility.decodeText(fileName);
                    }
                    saveFile(fileName, mpart.getInputStream(), reciveMail);
                } else if (mpart.isMimeType("multipart/*")) {
                    saveAttachMent(mpart, reciveMail);
                } else {
                    fileName = mpart.getFileName();
                    if ((fileName != null)
                            && (fileName.toLowerCase().indexOf("GB2312") != -1)) {
                        fileName = MimeUtility.decodeText(fileName);
                        saveFile(fileName, mpart.getInputStream(), reciveMail);
                    }
                }
            }
        } else if (part.isMimeType("message/rfc822")) {
            saveAttachMent((Part) part.getContent(), reciveMail);
        }
    }
    /**
     * 【真正的保存附件到指定目录里】
     */
    private void saveFile(String fileName, InputStream in, ReciveMail reciveMail) throws Exception {
        String osName = System.getProperty("os.name");
        String storedir = reciveMail.getAttachPath();
        String separator = "";
        if (osName == null) {
            osName = "";
        }
        if (osName.toLowerCase().indexOf("win") != -1) {
            separator = "\\";
            if (storedir == null || storedir.equals("")) {
                storedir = "c:\\tmp";
            }
        } else {
            separator = "/";
            storedir = "/tmp";
        }
        File storefile = new File(storedir + separator + fileName);
        System.out.println("storefile's path: " + storefile.toString());
        for (int i = 0; storefile.exists(); i++) {
            storefile = new File(storedir + separator + fileName + i);
        }
        BufferedOutputStream bos = null;
        BufferedInputStream bis = null;
        try {
            bos = new BufferedOutputStream(new FileOutputStream(storefile));
            bis = new BufferedInputStream(in);
            int c;
            while ((c = bis.read()) != -1) {
                bos.write(c);
                bos.flush();
            }
        } catch (Exception exception) {
            exception.printStackTrace();
            throw new Exception("文件保存失败!");
        } finally {
            bos.close();
            bis.close();
        }
    }

    /**
     * @description: 测试方法
     * @param pmm
     * @param fileSavePath
     * @author: lyp,
     * @date: 2020/11/13 10:11
     * @return:
     */
    public static void reciveMail(ReciveMail pmm,String fileSavePath) throws Exception {

        HashMap IAM = new HashMap();
        //带上IMAP ID信息,由key和value组成,例如name,version,vendor,support-email等。
        IAM.put("name","myname");
        IAM.put("version","1.0.0");
        IAM.put("vendor","myclient");
        IAM.put("support-email","testmail@test.com");

        Properties props = System.getProperties();
            /*
                    props.put("mail.smtp.host", pmm.getHost());//收件不需要这个
            */
        props.put("mail.smtp.auth", "true");
        Session session = Session.getDefaultInstance(props, null);
        URLName urln = new URLName("imap", pmm.getPopHost(), pmm.getPort(), pmm.getFile(), pmm.getUsername(), pmm.getPassword());
        IMAPStore store = (IMAPStore) session.getStore(urln);
        store.connect();
        store.id(IAM);
        Folder folder = store.getFolder("INBOX");
        folder.open(Folder.READ_ONLY);
        Message message[] = folder.getMessages();
        System.out.println("Messages's length: " + message.length);
        for (int i = 0; i < message.length; i++) {
            System.out.println("==========第" + (i + 1) + "份邮件============");
            pmm = new ReciveMail((MimeMessage) message[i]);
            System.out.println(" 主题: " + pmm.getSubject());
            System.out.println(" 发送日期: " + pmm.getSentDate());
            System.out.println(" 是否需要回执: " + pmm.getReplySign());
            System.out.println(" 是否已读: " + pmm.isNew());
            System.out.println(" 是否包含文件: " + getInstance().isContainAttach((Part) message[i]));
            System.out.println(" 谁发送的: " + pmm.getFrom());
            System.out.println(" 发送给谁的: " + pmm.getMailAddress("to"));
            System.out.println(" 抄送: " + pmm.getMailAddress("cc"));
            System.out.println(" 密件抄送: " + pmm.getMailAddress("bcc"));
            System.out.println("ID: " + pmm.getMessageId());
            // 获得邮件内容===============
            getInstance().getMailContent((Part) message[i], pmm);
            String content = pmm.getBodyText().substring(pmm.getBodyText().indexOf("<"), pmm.getBodyText().lastIndexOf(">") + 1);
            System.out.println(" 内容: \r\n" + content);
            pmm.setAttachPath(fileSavePath);
            getInstance().saveAttachMent((Part) message[i], pmm);
        }
    }

    /**
     * @description: 获取收件箱
     * @param pmm
     * @author: lyp,
     * @date: 2020/11/12 17:35
     * @return: {@link List< ReciveMail>}
     */
    public static List<ReciveMail> getInboxMail(ReciveMail pmm) throws Exception {
        Properties props = System.getProperties();
        props.put("mail.smtp.auth", "true");
        Session session = Session.getDefaultInstance(props, null);
        URLName urln = new URLName("pop3", pmm.getPopHost(), pmm.getPort(), pmm.getFile(), pmm.getUsername(), pmm.getPassword());
        Store store = session.getStore(urln);
        store.connect();
        Folder folder = store.getFolder("INBOX");
        folder.open(Folder.READ_ONLY);
        Message message[] = folder.getMessages();
        System.out.println("Messages's length: " + message.length);
        List<ReciveMail> list = new ArrayList<>();
        setMailList(message, list);

        return list;
    }

    /**
     * @description: 获取指定时间段收件箱
     * @param pmm
     * @author: lyp,
     * @date: 2020/11/12 17:35
     * @return: {@link List< ReciveMail>}
     */
    public static List<ReciveMail> getInboxMail(ReciveMail pmm, Date startTime,Date endTime) throws Exception {
        Properties props = System.getProperties();
            /*
                    props.put("mail.smtp.host", pmm.getHost());//收件不需要这个
            */
        props.put("mail.smtp.auth", "true");
        Session session = Session.getDefaultInstance(props, null);
        URLName urln = new URLName("pop3", pmm.getPopHost(), pmm.getPort(), pmm.getFile(), pmm.getUsername(), pmm.getPassword());
        Store store = session.getStore(urln);
        store.connect();
        Folder folder = store.getFolder("INBOX");
        folder.open(Folder.READ_ONLY);
        // 指定发送时间
        SearchTerm geTerm = new SentDateTerm(ComparisonTerm.GE, startTime);
        SearchTerm leTerm = new SentDateTerm(ComparisonTerm.LE, endTime);
        SearchTerm andTerm = new AndTerm(geTerm, leTerm);
        Message message[] = folder.search(andTerm);
        System.out.println("Messages's length: " + message.length);
        List<ReciveMail> list = new ArrayList<>();
        setMailList(message, list);

        return list;
    }

    /**
     * @description: 获取发件箱
     * @param pmm
     * @author: lyp,
     * @date: 2020/11/12 17:35
     * @return: {@link List< ReciveMail>}
     */
    public static List<ReciveMail> getSentMail(ReciveMail pmm) throws Exception {
        HashMap IAM = new HashMap();
        //带上IMAP ID信息,由key和value组成,例如name,version,vendor,support-email等。
        IAM.put("name","myname");
        IAM.put("version","1.0.0");
        IAM.put("vendor","myclient");
        IAM.put("support-email","testmail@test.com");
        Properties props = System.getProperties();
            /*
                    props.put("mail.smtp.host", pmm.getHost());//收件不需要这个
            */
        props.put("mail.smtp.auth", "true");
        Session session = Session.getDefaultInstance(props, null);
        URLName urln = new URLName("imap", pmm.getPopHost(), pmm.getPort(), pmm.getFile(), pmm.getUsername(), pmm.getPassword());
        IMAPStore store = (IMAPStore) session.getStore(urln);
        store.connect();
        store.id(IAM);
        // 网易与阿里云发件箱为已发送
        Folder folder = store.getFolder("已发送");
        if (folder == null) {
            // QQ发件箱为Sent Messages
            folder = store.getFolder("Sent Messages");
        }
        folder.open(Folder.READ_ONLY);
        Message message[] = folder.getMessages();
        System.out.println("Messages's length: " + message.length);
        List<ReciveMail> list = new ArrayList<>();
        setMailList(message, list);
        return list;
    }


    public static String transferChinese(String strText) {

        try {
            strText = MimeUtility.encodeText(new String(strText.getBytes(),
                    "GB2312"), "GB2312", "B");
        } catch (Exception e) {
            e.printStackTrace();
        }

        return strText;
    }

        private static void setMailList(Message[] message, List<ReciveMail> list) throws Exception {
        ReciveMail pmm;
        for (int i = 0; i < message.length; i++) {
            System.out.println("==========第" + (i + 1) + "份邮件============");
            pmm = new ReciveMail((MimeMessage) message[i]);
            getInstance().getMailContent((Part) message[i], pmm);
            String content = pmm.getBodyText().substring(pmm.getBodyText().indexOf("<"), pmm.getBodyText().lastIndexOf(">") + 1);
            pmm.setContent(content);
            list.add(pmm);
        }
        list.sort(new Comparator<ReciveMail>() {
            @Override
            public int compare(ReciveMail o1, ReciveMail o2) {
                try {
                    return o2.getMimeMessage().getSentDate().compareTo(o1.getMimeMessage().getSentDate());
                } catch (MessagingException e) {
                    e.printStackTrace();
                }
                return 1;
            }
        });
    }

    /**
     * PraseMimeMessage类测试
     */
    public static void main(String args[]) throws Exception {
        ReciveMail pmm = new ReciveMail();
        int port = “”;
        String file = null;

        String popHost = "";
        String username = "";
        String password = "";

        pmm.setPopHost(popHost);
        pmm.setPort(port);
        pmm.setFile(file);
        pmm.setUsername(username);
        pmm.setPassword(password);
        reciveMail(pmm,"");//记得设置文件保存路径
    }
}

使用pop3协议获取到的邮箱文件夹Folder中只有收件箱INBOX,所以获取发件箱以及其他的邮箱需使用IMAP协议获取,获取到的文件夹名称可以看我另一个博客中有写到,其中网易使用IMAP协议会提示不安全的登录,这是网易为了用户帐号信息安全,系统要求您的客户端表明相关“身份”信息才可以允许连接,需要验证身份信息加一个ID信息.

在这里插入图片描述

网易链接地址:出现不安全登录帮助原因

### 回答1: Java可以使用JavaMail API来获取收件箱中的邮件内容。首先需要导入javax.mail包,然后使用Session、Store、Folder等类来连接邮箱服务器,并获取收件箱中的邮件。具体实现细节可以参考JavaMail API的文档和相关教程。 ### 回答2: 要使用Java获取收件箱邮件内容,可以使用JavaMail API来实现。 首先,需要引入JavaMail库。可以在项目的依赖中添加以下依赖项: ```xml <dependency> <groupId>javax.mail</groupId> <artifactId>javax.mail-api</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> <version>1.6.2</version> </dependency> ``` 接下来,可以使用以下代码来连接到收件箱获取邮件内容: ```java import java.util.Properties; import javax.mail.*; public class MailFetcher { public static void main(String[] args) { // 邮箱账号和密码 String username = "your_email@example.com"; String password = "your_password"; // 邮箱服务的属性 Properties props = new Properties(); props.setProperty("mail.store.protocol", "imaps"); props.setProperty("mail.imaps.host", "imap.example.com"); props.setProperty("mail.imaps.port", "993"); props.setProperty("mail.imaps.ssl.trust", "*"); try { // 创建会话 Session session = Session.getInstance(props, null); // 连接到收件箱 Store store = session.getStore(); store.connect(username, password); // 打开收件箱 Folder inbox = store.getFolder("INBOX"); inbox.open(Folder.READ_ONLY); // 获取收件箱邮件 Message[] messages = inbox.getMessages(); // 遍历邮件并输出内容 for (Message message : messages) { System.out.println("Subject: " + message.getSubject()); System.out.println("From: " + message.getFrom()[0]); System.out.println("Date: " + message.getSentDate()); System.out.println("Content: " + message.getContent().toString()); System.out.println("---------------------------------"); } // 关闭连接 inbox.close(false); store.close(); } catch (Exception e) { e.printStackTrace(); } } } ``` 注意替换代码中的"your_email@example.com"和"your_password"为你的邮箱账号和密码,"imap.example.com"为你的邮箱服务器地址。 以上代码会连接到收件箱,然后遍历邮件并输出邮件主题、发件人、日期和内容。 这就是使用Java获取收件箱邮件内容的基本步骤。 ### 回答3: 要使用Java获取收件箱邮件内容,你可以使用JavaMail API来完成这个任务。 首先,确保你已经在你的项目中导入了JavaMail API的库。 接下来,你需要建立与你的邮箱服务器的连接。通过创建一个javax.mail.Session对象,你可以指定邮件服务器的地址、端口号、用户名和密码等信息来建立连接。例如: ```java Properties props = new Properties(); props.setProperty("mail.imap.host", "imap.example.com"); props.setProperty("mail.imap.port", "993"); props.setProperty("mail.imap.ssl.enable", "true"); Session session = Session.getInstance(props, new Authenticator() { protected PasswordAuthentication getPasswordAuthentication() { return new PasswordAuthentication("username", "password"); } }); ``` 然后,你需要使用javax.mail.Store类来打开收件箱。通过指定邮件协议为IMAP或POP3,你可以连接到收件箱。例如,使用IMAP协议: ```java Store store = session.getStore("imap"); store.connect(); ``` 接下来,你可以打开收件箱,并使用javax.mail.Folder类的方法获取邮件内容。例如,获取收件箱中的所有邮件: ```java Folder inboxFolder = store.getFolder("INBOX"); inboxFolder.open(Folder.READ_ONLY); Message[] messages = inboxFolder.getMessages(); for (Message message : messages) { String subject = message.getSubject(); Address[] from = message.getFrom(); Date sentDate = message.getSentDate(); // 其他邮件内容的获取操作 } ``` 最后,别忘了在完成任务后关闭连接和文件夹: ```java inboxFolder.close(false); store.close(); ``` 这样,你就可以使用Java获取收件箱邮件内容了。你可以根据需要进一步处理邮件内容,如获取附件、解析邮件内容等。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值