java中的Gmail附件下载问题

如何解决java中的Gmail附件下载问题

我正在使用 java 中的 imap 从 gmail 下载音频文件。音频文件已成功下载并播放。通常在 IST 凌晨 5 点左右,文件未下载。得到像“java.lang.NullPointerException”这样的异常。昨天我遇到了这个问题,但今天相同的代码工作正常,下载了音频文件,我不知道如何管理这个以找到这个问题的根本原因。你能请任何人帮助我吗?

注意:添加了更多日志以了解用于测试目的的流程,

日志:

    TID: [-1234] [] [2021-02-22 03:01:15,925]  INFO {com.vb.service.EmailAttachmentDownload} -  ====UserName==== : vb.lead@qrsolutions.com.au {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:15,925]  INFO {com.vb.service.EmailAttachmentDownload} -  ====Password==== : e59851edd90156ff379e {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:15,925]  INFO {com.vb.service.EmailAttachmentDownload} -  ====FileName==== : 00432214294_rcvm0117_00800000210222130231.wav {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:15,925]  INFO {com.vb.service.EmailAttachmentDownload} -  ====SaveDirectory==== : /wso2/BulkPush/HarmonySourcePath/ {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:15,925]  INFO {com.vb.service.EmailAttachmentDownload} -  ====Download FileName==== : VB_TwoWayRecording_00432214294_rcvm0117_00800000210222130231.wav {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:15,925]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 1. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:15,925]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step SetSaveDirectory Method. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:15,925]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 2. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:15,925]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 3. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:15,925]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 4. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:15,925]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 5. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:15,926]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 7. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:15,926]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 8. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:15,928]  INFO {com.vb.service.EmailAttachmentDownload$1} -  ==== Logger Text ==== : Step 6. {com.vb.service.EmailAttachmentDownload$1}
TID: [-1234] [] [2021-02-22 03:01:17,481]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 9. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:17,792]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 10. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:18,097]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 11. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:18,097]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 12 - 0 {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:18,404]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 13. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:18,404]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 14. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:18,404]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 15. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:18,404]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 16. {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:18,404]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 46 - Exception Sequence {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:18,404]  INFO {com.vb.service.EmailAttachmentDownload} -  General/Common Exceptionjava.lang.NullPointerException {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:18,404]  INFO {com.vb.service.EmailAttachmentDownload} -  Exception Message:   [Ljava.lang.StackTraceElement;@24983d2b** Exception Message:   null {com.vb.service.EmailAttachmentDownload}
TID: [-1234] [] [2021-02-22 03:01:18,404]  INFO {com.vb.service.EmailAttachmentDownload} -  ==== Logger Text ==== : Step 47. {com.vb.service.EmailAttachmentDownload}

日志图像:

Log File

代码:

package JavaPackage;

import java.util.logging.Logger;
import java.io.File;
import java.io.IOException;
import java.util.Properties;


import javax.mail.Address;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
import javax.mail.Part;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.MimeBodyPart;
import javax.mail.search.FlagTerm;



public class GetEmailAttachment {
    private String saveDirectory;
    private static final Logger logger = Logger.getLogger(GetEmailAttachment.class.getName());

public static void main(String[] args) {
    logger.info("===Inside the attachment download class===");
    String host = "imap.gmail.com";

    String port = "995";
    
      String userName = "username"; 
      String password= "pwd"; 
      String inputFileName ="00432214294_rcvm0117_00800000210222130231.wav";
     String saveDirectory = "D:/HarmonyTemplate/Source";
     String downloadFileName = "VB_TwoWayRecording_TestAudio";
     logger.info("====UserName==== : " + userName);
        logger.info("====Password==== : " + password);
        logger.info("====FileName==== : " + inputFileName);
        logger.info("====SaveDirectory==== : " + saveDirectory);
        logger.info("====Download FileName==== : " + downloadFileName);

        GetEmailAttachment receiver = new GetEmailAttachment();
        logger.info("==== Logger Text ==== : Step 1.");
        receiver.setSaveDirectory(saveDirectory);
        logger.info("==== Logger Text ==== : Step 2.");
        receiver.downloadEmailAttachments(userName,password,inputFileName,downloadFileName);
     
}
public void setSaveDirectory(String dir) {
    logger.info("==== Logger Text ==== : Step SetSaveDirectory Method.");
    this.saveDirectory = dir;
}

public boolean downloadEmailAttachments(String userName,String password,String inputfileName,String downloadFileName) {
    
    try {
    logger.info("==== Logger Text ==== : Step 3.");
    Properties properties = new Properties();
    logger.info("==== Logger Text ==== : Step 4.");
    properties.setProperty("mail.host","imap.gmail.com");
    properties.setProperty("mail.port","995");
    properties.setProperty("mail.transport.protocol","imaps");
    logger.info("==== Logger Text ==== : Step 5.");
    Session session = Session.getInstance(properties,new javax.mail.Authenticator() {
        protected PasswordAuthentication getPasswordAuthentication() {
            logger.info("==== Logger Text ==== : Step 6.");
            return new PasswordAuthentication(userName,password);
        }
    });
    logger.info("==== Logger Text ==== : Step 7.");
    

        // connects to the message store
        Store store = session.getStore("imaps");
        logger.info("==== Logger Text ==== : Step 8.");
        store.connect();
        logger.info("==== Logger Text ==== : Step 9.");
        Folder folderInbox = store.getFolder("INBOX");
        folderInbox.open(Folder.READ_WRITE);
        logger.info("==== Logger Text ==== : Step 10.");
        // fetches new messages from server
        Message[] arrayMessages = folderInbox.search(new FlagTerm(new Flags(Flags.Flag.SEEN),false));
        logger.info("==== Logger Text ==== : Step 11.");
        for (int i = 0; i < arrayMessages.length; i++) {
            logger.info("==== Logger Text ==== : Step 12 - " + i);
            Message message = arrayMessages[i];
            Address[] fromAddress = message.getFrom();
            logger.info("==== Logger Text ==== : Step 13.");
            String from = fromAddress[0].toString();
            logger.info("==== Logger Text ==== : Step 14.");
            String subject = message.getSubject();
            logger.info("==== Logger Text ==== : Step 15.");
            String sentDate = message.getSentDate().toString();
            logger.info("==== Logger Text ==== : Step 16.");
            if ((subject.replaceAll(" ","").trim().toUpperCase().contains("AUTOMATICTWO-WAYRECORDING"))
                    || (subject.replaceAll(" ","").trim().toUpperCase().contains("MESSAGENOTIFICATIONFROM"))) {
                logger.info("====== Inside the subject check of class mediator =======");
                String contentType = message.getContentType();
                String messageContent = "";

                // store attachment file name,separated by comma
                String attachFiles = "";
                logger.info("==== Logger Text ==== : Step 17.");
                if (contentType.contains("multipart")) {
                    logger.info("======Contains multipart values======");
                    // content may contain attachments
                    Multipart multiPart = (Multipart) message.getContent();
                    logger.info("==== Logger Text ==== : Step 18.");
                    int numberOfParts = multiPart.getCount();
                    logger.info("==== Logger Text ==== : Step 19.");
                    for (int partCount = 0; partCount < numberOfParts; partCount++) {
                        logger.info("==== Logger Text ==== : Step 20 - " + partCount);
                        MimeBodyPart part = (MimeBodyPart) multiPart.getBodyPart(partCount);
                        logger.info("==== Logger Text ==== : Step 21.");
                        if (Part.ATTACHMENT.equalsIgnoreCase(part.getDisposition())) {
                            logger.info("==== Logger Text ==== : Step 22.");
                            // this part is attachment
                            String fileName = part.getFileName();
                            logger.info("==== Logger Text ==== : Step 23.");
                            if (inputfileName.equals(fileName)) {
                                logger.info("==== Logger Text ==== : Step 24.");
                                attachFiles += fileName + ",";
                                logger.info("====== Final Values ====== "
                                        + (saveDirectory + File.separator + downloadFileName));
                                part.saveFile(saveDirectory + File.separator + downloadFileName);
                                logger.info("==== Logger Text ==== : Step 25.");
                                return true;
                            }
                            logger.info("==== Logger Text ==== : Step 26.");
                        } else {
                            logger.info("==== Logger Text ==== : Step 27.");
                            // this part may be the message content
                            messageContent = part.getContent().toString();
                            logger.info("==== Logger Text ==== : Step 28.");
                        }
                    logger.info("==== Logger Text ==== : Step 29.");
                    }
                    logger.info("==== Logger Text ==== : Step 30.");
                    if (attachFiles.length() > 1) {
                        logger.info("==== Logger Text ==== : Step 31.");
                        attachFiles = attachFiles.substring(0,attachFiles.length() - 2);
                    }
                    logger.info("==== Logger Text ==== : Step 32.");
                } else if (contentType.contains("text/plain") || contentType.contains("text/html")) {
                    logger.info("==== Logger Text ==== : Step 33.");
                    Object content = message.getContent();
                    logger.info("==== Logger Text ==== : Step 34.");
                    if (content != null) {
                        logger.info("==== Logger Text ==== : Step 35.");
                        messageContent = content.toString();
                        logger.info("==== Logger Text ==== : Step 36.");
                    }
                    logger.info("==== Logger Text ==== : Step 37.");
                }
                logger.info("==== Logger Text ==== : Step 38.");

                // print out details of each message
                logger.info("Message #" + (i + 1) + ":");
                logger.info("\t From: " + from);
                logger.info("\t Subject: " + subject);
                logger.info("\t Sent Date: " + sentDate);
                logger.info("\t Message: " + messageContent);
                logger.info("\t Attachments: " + attachFiles);

            }
            logger.info("==== Logger Text ==== : Step 39.");
        }
        logger.info("==== Logger Text ==== : Step 40.");
        // disconnect
        folderInbox.close(false);
        logger.info("==== Logger Text ==== : Step 41.");
        store.close();
        logger.info("==== Logger Text ==== : Step 42.");

    } catch (NoSuchProviderException ex) {
        logger.info("==== Logger Text ==== : Step 43 - Exception Sequence");
        logger.info("No provider for pop3." + ex);
        logger.info("Exception Message:   " + ex.getStackTrace() + "** " + "Exception Message:   " + ex.getMessage());
        ex.printStackTrace();
        //context.setProperty("EXCEPTION_MESSAGE_Raw",ex.toString());
    } catch (MessagingException ex) {
        logger.info("==== Logger Text ==== : Step 44 - Exception Sequence");
        logger.info("Could not connect to the message store" + ex);
        logger.info("Exception Message:   " + ex.getStackTrace() + "** " + "Exception Message:   " + ex.getMessage());
        ex.printStackTrace();
        //context.setProperty("EXCEPTION_MESSAGE_Raw",ex.toString());
    } catch (IOException ex) {
        logger.info("==== Logger Text ==== : Step 45 - Exception Sequence");
        logger.info("Exception in IO Files" + ex);
        logger.info("Exception Message:   " + ex.getStackTrace() + "** " + "Exception Message:   " + ex.getMessage());
        ex.printStackTrace();
        
    } catch (Exception ex) {
        logger.info("==== Logger Text ==== : Step 46 - Exception Sequence");
        logger.info("General/Common Exception" + ex);
        logger.info("Exception Message:   " + ex.getStackTrace() + "** " + "Exception Message:   " + ex.getMessage());
        ex.printStackTrace();
        logger.info(ex.toString());
        
    }
    
    logger.info("==== Logger Text ==== : Step 47.");
    return true;
}
}

解决方法

您打印 Log 16,然后打印抛出 NullPointer 的 Log 46。

你的问题在于:

  if ((subject.replaceAll(" ","").trim().toUpperCase().contains("AUTOMATICTWO-WAYRECORDING"))
                    || (subject.replaceAll(" ","").trim().toUpperCase().contains("MESSAGENOTIFICATIONFROM"))) {

     

因为你没有打印,“======在你捕获异常之前在类中介器的主题检查中=======。

您的主题为空。

顺便说一句,你也不能保证通过这个。如果您不检查 != null

,您仍然可以在接下来的步骤中面对另一个 NullPointer
Fix:    if ((subject != null && subject.replaceAll(" ","").trim().toUpperCase().contains("AUTOMATICTWO-WAYRECORDING"))
                || (subject.replaceAll(" ","").trim().toUpperCase().contains("MESSAGENOTIFICATIONFROM"))) {
     

这是可行的,因为如果 subject == null,它将快速失败并存在 if 语句而不检查 subject.replaceAll。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-
参考1 参考2 解决方案 # 点击安装源 协议选择 http:// 路径填写 mirrors.aliyun.com/centos/8.3.2011/BaseOS/x86_64/os URL类型 软件库URL 其他路径 # 版本 7 mirrors.aliyun.com/centos/7/os/x86
报错1 [root@slave1 data_mocker]# kafka-console-consumer.sh --bootstrap-server slave1:9092 --topic topic_db [2023-12-19 18:31:12,770] WARN [Consumer clie
错误1 # 重写数据 hive (edu)&gt; insert overwrite table dwd_trade_cart_add_inc &gt; select data.id, &gt; data.user_id, &gt; data.course_id, &gt; date_format(
错误1 hive (edu)&gt; insert into huanhuan values(1,&#39;haoge&#39;); Query ID = root_20240110071417_fe1517ad-3607-41f4-bdcf-d00b98ac443e Total jobs = 1
报错1:执行到如下就不执行了,没有显示Successfully registered new MBean. [root@slave1 bin]# /usr/local/software/flume-1.9.0/bin/flume-ng agent -n a1 -c /usr/local/softwa
虚拟及没有启动任何服务器查看jps会显示jps,如果没有显示任何东西 [root@slave2 ~]# jps 9647 Jps 解决方案 # 进入/tmp查看 [root@slave1 dfs]# cd /tmp [root@slave1 tmp]# ll 总用量 48 drwxr-xr-x. 2
报错1 hive&gt; show databases; OK Failed with exception java.io.IOException:java.lang.RuntimeException: Error in configuring object Time taken: 0.474 se
报错1 [root@localhost ~]# vim -bash: vim: 未找到命令 安装vim yum -y install vim* # 查看是否安装成功 [root@hadoop01 hadoop]# rpm -qa |grep vim vim-X11-7.4.629-8.el7_9.x
修改hadoop配置 vi /usr/local/software/hadoop-2.9.2/etc/hadoop/yarn-site.xml # 添加如下 &lt;configuration&gt; &lt;property&gt; &lt;name&gt;yarn.nodemanager.res