java - 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}
代码:
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。
推荐阅读
- c# - 为什么我需要 ICommand 中的 getter 和 setter?
- java - 拖放不适用于无头 chromedriver
- macos - 应用程序“App.app”无法打开
- kubernetes - GCE入口多路径通配符问题
- android - Dialog(Date) & Spinner(Dropdown) 可以被认为是一个字符串?如何将其存储到数据库中?我试图解释更多我所面临的
- javascript - 从nodejs服务器将数据发送到另一个html中的对象
- javascript - 如何在一次调用中分配多个 html 元素值?
- angular6 - Summernote Angular 6 CLI 注释或注释
- python - 在当前活动目录上运行存储在服务器上的 python 脚本
- vim - Vim 语法高亮之后