精华内容
下载资源
问答
  • 打开邮箱一看,好家伙,一堆邮件,有用的没用的,整的我头皮发麻。赶紧整理一下这些东西。因为这次准备放到日常维护的java项目中日常跑,所以就不用python啦。好了,因为这回不给舅妈看,直接上操作。一、先给邮箱...

    给舅妈打下手搞了好几天,终于算完事了,可真辛苦(这红烧肉可味道真棒)。

    把自己的事情都给落下了。

    打开邮箱一看,好家伙,一堆邮件,有用的没用的,整的我头皮发麻。

    赶紧整理一下这些东西。

    因为这次准备放到日常维护的java项目中日常跑,所以就不用python啦。

    好了,因为这回不给舅妈看,直接上操作。

    一、先给邮箱开通POP3/SMTP服务服务。

    这里拿qq邮箱演示,大家都有哈。

    980c803a4d264feb9a667254c09747e6.png

    840a7928b6c819495b9f9ea7ac1a97fa.png

    1.首先要确保服务开启

    2.需要生成授信码,后续代码中连接的密码不是登录密码,而是用的授信码

    二、连接邮箱配置

    919f9e622ac12ce35593705d857e7fe7.png
    qq邮箱服务器地址
    public static void resceive() throws Exception {
            // 服务器地址
            String servicePath = "pop.qq.com"; 
            // 端口号
            String duankou = "110";  
            // 邮箱名
            String emailName = "*******@qq.com";
            // 前面提到的授信码
            String password = "*********";
    
    
            // 准备连接服务器的会话信息
            Properties props = new Properties();
            // 连接超时报错配置
            props.setProperty("mail.pop3.timeout", "2000");         
            props.setProperty("mail.store.protocol", "pop3");       
            props.setProperty("mail.pop3.port", duankou);           
            props.setProperty("mail.pop3.host", servicePath);       
    
            // 创建Session实例对象
            Session session = Session.getInstance(props);
            Store store = session.getStore("pop3");
            store.connect(emailName , password); 
    
    
            // 获得收件箱 只能获取一个月内的邮件
            Folder folder = store.getFolder("INBOX");
            // 如果要读写的话可以选择READ_WRITE
            folder.open(Folder.READ_ONLY); 
    
            // 获得收件箱中的邮件总数
            System.out.println("邮件总数: " + folder.getMessageCount());
    
            // 筛选收件箱中带附件的邮件并将文件保存到本地
            Message[] messages = folder.getMessages();
            parseFileMessage(messages);
    
            //释放资源
            folder.close(true);
            store.close();
        }

    三、对附件文件进行筛选

     public static void parseFileMessage(Message ...messages) throws Exception {
            if (messages == null || messages.length < 1)
                System.out.println("没有需要处理的邮件");
    
            // 解析所有邮件
            for (int i = 0; i < messages.length; i++) {
                MimeMessage msg = (MimeMessage) messages[i];
                System.out.println("主题: " + getSubject(msg));
                System.out.println("发件人: " + getFrom(msg));
                boolean isContainerAttachment = isContainAttachment(msg);
                System.out.println("是否包含附件:" + isContainerAttachment);
                if (isContainerAttachment) {
                    saveAttachment(msg, "D:datamailFile",getSubject(msg)); //保存附件
                }else {
                    continue;
                }
                System.out.println("当前为第"+msg.getMessageNumber()+"封邮件");
            }
        }
    
       /**
         * 判断邮件中是否包含附件
         * @return 存在附件返回true,不存在返回false
         */
        public static boolean isContainAttachment(Part part) throws Exception {
            boolean flag = false;
            if (part.isMimeType("multipart/*")) {
                MimeMultipart multipart = (MimeMultipart) part.getContent();
                int partCount = multipart.getCount();
                for (int i = 0; i < partCount; i++) {
                    BodyPart bodyPart = multipart.getBodyPart(i);
                    String disp = bodyPart.getDisposition();
                    if (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE))) {
                        flag = true;
                    } else if (bodyPart.isMimeType("multipart/*")) {
                        flag = isContainAttachment(bodyPart);
                    } else {
                        String contentType = bodyPart.getContentType();
                        if (contentType.indexOf("application") != -1) {
                            flag = true;
                        }
    
                        if (contentType.indexOf("name") != -1) {
                            flag = true;
                        }
                    }
    
                    if (flag) break;
                }
            } else if (part.isMimeType("message/rfc822")) {
                flag = isContainAttachment((Part)part.getContent());
            }
            return flag;
        }

    四、保存文件

        /**
         * 保存文件
         * @param destDir   文件目录
         * @param fileName  文件名
         * @throws Exception
         */
        public static void saveAttachment(Part part, String destDir,String fileName) throws Exception {
            if (part.isMimeType("multipart/*")) {
                //复杂体邮件
                Multipart multipart = (Multipart) part.getContent();
                //复杂体邮件包含多个邮件体
                int partCount = multipart.getCount();
                for (int i = 0; i < partCount; i++) {
                    //获得复杂体邮件中其中一个邮件体
                    BodyPart bodyPart = multipart.getBodyPart(i);
                    //迭代处理邮件体,直到附件为止
                    String disp = bodyPart.getDisposition();
                    String decodeName = decodeText(bodyPart.getFileName());
                    decodeName = StringUtils.isEmpty(decodeName)?fileName:decodeName;
                    if (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE))) {
                        saveFile(bodyPart.getInputStream(), destDir, decodeName);
                    } else if (bodyPart.isMimeType("multipart/*")) {
                        saveAttachment(bodyPart,destDir,fileName);
                    } else {
                        String contentType = bodyPart.getContentType();
                        if (contentType.indexOf("name") != -1 || contentType.indexOf("application") != -1) {
                            saveFile(bodyPart.getInputStream(), destDir, decodeName);
                        }
                    }
                }
            } else if (part.isMimeType("message/rfc822")) {
                saveAttachment((Part) part.getContent(),destDir,fileName);
            }
        }
    
        /**
         * 读取输入流中的数据保存至指定目录
         * @param is 输入流
         * @param fileName 文件名
         * @param destDir 文件存储目录
         */
        private static void saveFile(InputStream is, String destDir, String fileName)
                throws Exception {
            createEmptyDirectory(destDir);
            BufferedInputStream bis = new BufferedInputStream(is);
            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(destDir + fileName)));
            int len;
            while ((len = bis.read()) != -1) {
                bos.write(len);
                bos.flush();
            }
            bos.close();
            bis.close();
        }
    
        /**
         * 创建一个空目录
         */
        public static void createEmptyDirectory(String directoryPath) throws IOException {
            File file = new File(directoryPath);
            if(!file.exists()){
                file.mkdirs();
            }
        }
    
        /**
         * 文本解码
         */
        public static String decodeText(String encodeText) throws Exception {
            if (encodeText == null || "".equals(encodeText)) {
                return "";
            } else {
                return MimeUtility.decodeText(encodeText);
            }
        }

    五、好咯,检查下文件就可以听歌休息去了,想着啥时候再去蹭顿红烧肉呢

    ab22f3d55fc1cb32277510d20b5b5164.png
    展开全文
  • 打开邮箱一看,好家伙,一堆邮件,有用的没用的,整的我头皮发麻。赶紧整理一下这些东西。因为这次准备放到日常维护的java项目中日常跑,所以就不用python啦。好了,因为这回不给舅妈看,直接上操作。一、先给邮箱...

    给舅妈打下手搞了好几天,终于算完事了,可真辛苦(这红烧肉可味道真棒)。

    把自己的事情都给落下了。

    打开邮箱一看,好家伙,一堆邮件,有用的没用的,整的我头皮发麻。

    赶紧整理一下这些东西。

    因为这次准备放到日常维护的java项目中日常跑,所以就不用python啦。

    好了,因为这回不给舅妈看,直接上操作。

    一、先给邮箱开通POP3/SMTP服务服务。

    这里拿qq邮箱演示,大家都有哈。

    1.首先要确保服务开启

    2.需要生成授信码,后续代码中连接的密码不是登录密码,而是用的授信码

    二、连接邮箱配置

    qq邮箱服务器地址
    public

    三、对附件文件进行筛选

    public

    四、保存文件

    /**
    

    五、好咯,检查下文件就可以听歌休息去了,想着啥时候再去蹭顿红烧肉呢

    展开全文
  • 能给出具体调用接口或则给一个小例子最好!|这两篇文章看看,我以前写javamail的时候也是参考这两篇的,基本上可以满足你的要求http://softwaredev.earthweb.com/java/sdjjavase/article/0,,12395_618471,00....

    能给出具体调用接口或则给一个小例子最好!

    |

    这两篇文章看看,我以前写javamail的时候也是参考这两篇的,基本上可以满足你的要求

    http://softwaredev.earthweb.com/java/sdjjavase/article/0,,12395_618471,00.html

    http://softwaredev.earthweb.com/java/sdjjavase/article/0,,12395_618481,00.html

    具体例子,不好意思啦,写的有一段时间了,也只是试试而已,现在也不知道搞哪里去了,准备过几周再写。

    |

    好像不是哦,我记得是用javax.mail.FetchProfile

    我找了曾经写maillist的一段代码:

    需要先打开folder,然后..

    // 获得所有新邮件的属性和标记

    Message[] messages = folder.getMessages();

    FetchProfile fp = new FetchProfile();

    fp.add(FetchProfile.Item.ENVELOPE);

    fp.add(FetchProfile.Item.FLAGS);

    fp.add("X-Mailer");

    folder.fetch(messages, fp);

    Message newMessage = new MimeMessage(session); //带附件的message

    newMessage.setContent((Multipart)message.getContent());

    我这里是把收到的信件message直接发出去了

    |

    创建一个MimeBodyPart对象并通过file读取多个文件给它,然后绑定到为MimeMessage创建的MimeMultipart实例,随后把MimeMultipart绑定给MimeMessage,随后发送出去。

    MimeMessage.setContent(MimeMultipart)

    MimeMultipart.addBodyPart(MimeBodyPart)

    读取message的时候要注意,我见过有朋友很随意的就把它当作带附件的信件处理。

    可以用instance of来判断一下每封信是否有附件,或者通过带附件标记来判断:

    Object content = message.getContent();

    if (content instanceof Multipart)

    //message带附件

    else

    //message不带附件

    很抱歉我家里机器上没有那几个jar,所以没法具体测试一下,只能根据以前的代码和记忆这么写。

    |

    mark

    展开全文
  • 通过Java读取QQ邮件邮件解析-附件资源
  • Java实现发送QQ邮件功能(带附件)首先我们需要两个jar包,点击下面即可下载这两个包:或者引入mavenjavax.mailmail1.4代码示例:package com.pipi.mail;import javax.activation.DataHandler;import javax.activation...

    Java实现发送QQ邮件功能(带附件)

    首先我们需要两个jar包,点击下面即可下载这两个包:

    或者引入maven

    javax.mail

    mail

    1.4

    代码示例:

    package com.pipi.mail;

    import javax.activation.DataHandler;

    import javax.activation.DataSource;

    import javax.activation.FileDataSource;

    import javax.mail.*;

    import javax.mail.internet.*;

    import java.io.File;

    import java.io.FileOutputStream;

    import java.io.OutputStream;

    import java.util.Date;

    import java.util.Properties;

    public class SendMail {

    public static void main(String[] args) throws Exception {

    final String from = "xxxxxxx@qq.com"; //发件人的邮箱地址

    String to = "xxxxxxx@qq.com"; //收件人的邮箱地址

    String subject = "测试"; //邮件主题

    String body = "邮件正文"; //邮件内容

    //设置发送邮件的一些属性

    Properties prop = new Properties();

    prop.setProperty("mail.transport.protocol", "smtp");

    prop.setProperty("mail.smtp.host", "smtp.qq.com");

    prop.setProperty("mail.smtp.port", "587"); // 有些代码端口是465是有问题的

    prop.setProperty("mail.smtp.auth", "true");

    prop.setProperty("mail.debug", "true");

    prop.setProperty("mail.smtp.ssl.enable", "true"); //qq邮箱必须设置这一项,ssl加密选项

    Session session = Session.getDefaultInstance(prop, new Authenticator() {

    public PasswordAuthentication getPasswordAuthentication() {

    //这里需要验证邮箱的授权码,QQ邮箱需要授权码

    return new PasswordAuthentication(from, "第三方登录授权码");

    }

    });

    MimeMessage message = new MimeMessage(session);

    try {

    Transport transport = session.getTransport();

    message.setFrom(new InternetAddress(from));

    message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));

    message.setSentDate(new Date());

    message.setSubject(subject);

    // 创建消息体部分

    BodyPart messageBodyPart = new MimeBodyPart();

    messageBodyPart.setText("这是邮件正文");

    // 创建多重消息

    Multipart multipart = new MimeMultipart();

    multipart.addBodyPart(messageBodyPart); // 将消息体部分加入到多重消息中

    // 创建一个附件

    messageBodyPart = new MimeBodyPart();

    String filePath = "/Users/apple/Desktop/测试.docx"; // 注意windows的地址问题

    File file = new File(filePath);

    DataSource source = new FileDataSource(file);

    messageBodyPart.setDataHandler(new DataHandler(source));

    String fileName = filePath.substring(filePath.lastIndexOf('/') + 1);

    System.out.println(fileName);

    // messageBodyPart.setFileName(fileName); 出现乱码问题

    messageBodyPart.setFileName(MimeUtility.encodeText(fileName));

    multipart.addBodyPart(messageBodyPart);

    message.setContent(multipart);

    message.saveChanges();

    session.setDebug(true);

    transport.connect(from, "第三方登录授权码");

    transport.sendMessage(message, message.getAllRecipients());

    transport.close();

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    展开全文
  • java连接Lotes邮件服务器(Domino) 读取邮件内容附件完整实例
  • 项目中要求读取指定邮件未读邮件的内容,在网上查了很多资料发现都不行,不是自己想要的,要么是读取最新的,要么是读取第一封邮件,根本就不能读取未读的旧邮件。...java读取未读邮件内容包括附件包含javamail.jar
  • String pop3Server = "pop3.163.com"; // 收件服务器 pop3.163.com  8531.icoremail.net  String protocol = "pop3";  String port = "995"; // 邮件服务端口号 995  String username = "trsnj_xiabin@1
  • java邮件读取工具类,可读取附件,功能强大,经测试可用。
  • // 设置邮件的文本内容 BodyPart contentPart = new MimeBodyPart(); contentPart.setContent(mailtext,"text/html;charset=GBK"); multipart.addBodyPart(contentPart); /** * 添加附件 */ if (affix.length>0) { ...
  • 我在网上找的demo,当qq邮件里包含附件与正文内容时,只能读取附件,正文就读取不到了。 下面这个是我写的,可以拿过去运行看看。困扰我多时了。 http://blog.csdn.net/qq_19806865/article/details/78855326
  • 我正在使用javamail来自动...根据邮件标题,我可以“预测”我需要获取的附件的文件名。但我无法得到它的内容:(我有一个函数public byte[] searchForContent(Part part,String fileName){if(part.getFileName()!=null...
  • package com.wanwan.csv; import java.io.FileNotFoundException; import java.io.IOException; import java.nio.charset.Charset; import com.csvreader.CsvReader; public class ExcelReader { pr
  • 原本业务使用javamail通过imap协议读取邮件,后来有个客户那边不支持imap协议,需要改为通过微软的ews(exchange web service)协议读取。结合网上已有的资料,自己测试了一把,以下是可以成功运行的代码 1.maven...
  • 这个读取邮件服务器的邮件可以读取一部分,邮件内容大致相同,含有附件,但是读到27左右就发生异常。我读取不含附件的邮件,可以读取到70多份,不会发生异常。红线部分发生异常 异常内容 ![图片说明]...
  • java实现读取邮件发送邮件

    千次阅读 2016-02-18 11:16:40
    有些邮箱pop服务器不支持查看是否邮件已经被查看多的功能,只能通过自己认为添加标识标记邮件是已读还是未读 ... * @return 邮件中存在附件返回true,不存在返回false   * @throws Messag
  • 错误:java.io.IOException: No content 还有关于base64字眼 翻墙查询资料有说是读取附件时分批获取 BASE64 输入流的配置导致的 解决:props.setProperty(“mail.imap.partialfetch”, “false”); 关闭即可
  • 当有需求,需要把当天的报表文件发送给指定邮箱又不小生成多余的...实现过程是先将数据库里的数据,导出excel文件输出流中(注:不是直接生成文件),发送邮件附件内容直接从前面excel文件输出流中获取,然后发送邮件
  • SMTP全称为Simple Mail Transfer Protocol(简单邮件传输协议),它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP认证要求必须提供账号和密码才能登陆服务器,其设计目的在于避免...
  • 使用 Exchange 中的 EWS 获取附件Get attachments by using EWS in Exchange03/9/2015本文内容了解如何通过在 Exchange 中使用 EWS 托管 API 或 EWS 从 EWS 项目中获取附件。Learn how to get attachments from EWS ...
  • 22 importjava.util.Arrays;23 importjava.util.Calendar;24 importjava.util.Date;25 importjava.util.Properties;26 27 @Service28 @Slf4j29 @Data30 @ConfigurationProperties(prefix = "spring.mail")31 public ...
  • 使用Java解析邮件时,想要直接读取附件(Excel表格)里的内容,不是下载附件,该怎么实现?
  • 利用Java发送邮件(含附件)的例子:1、邮件发送的配置propertity文件内容如下:(utils.properties文件放在src下面)emailsmtp=smtp.qq.comemailaddress=459104018@qq.comemailpass=******2、读取配置文件的类文件...
  • 利用Java发送邮件(含附件)的例子:1、邮件发送的配置propertity文件内容如下:(utils.properties文件放在src下面)emailsmtp=smtp.qq.comemailaddress=459104018@qq.comemailpass=******2、读取配置文件的类文件...
  • java 从邮箱里面把附件拿出来 代码直接用 package com.kdmins.mail; import com.sun.mail.pop3.POP3Folder; import com.sun.mail.pop3.POP3Store; import com.sun.mail.util.MailSSLSocketFactory; import java....

空空如也

空空如也

1 2 3 4
收藏数 80
精华内容 32
关键字:

java读取邮件附件

java 订阅