Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:使用Javamail阅读电子邮件_Java_Jakarta Mail - Fatal编程技术网

Java:使用Javamail阅读电子邮件

Java:使用Javamail阅读电子邮件,java,jakarta-mail,Java,Jakarta Mail,我一直在开发一个程序,假设它使用javamail来读取收件箱,如果一封电子邮件包含一个特定的字符串,它应该被打开 首先,这是我第一次尝试使用这个javamail api——我很确定我的属性都是乱七八糟的——有人能告诉我如何正确设置javamail的属性吗 其次,我似乎可以通过API进行连接,但如果我尝试搜索主题,主题为空,我会得到一个空指针异常-如果我不尝试将主题与“Ordretest”匹配,我不会得到空指针-任何提示都会有很大帮助:) package-vildereMail; 导入java.u

我一直在开发一个程序,假设它使用javamail来读取收件箱,如果一封电子邮件包含一个特定的字符串,它应该被打开

首先,这是我第一次尝试使用这个javamail api——我很确定我的属性都是乱七八糟的——有人能告诉我如何正确设置javamail的属性吗

其次,我似乎可以通过API进行连接,但如果我尝试搜索主题,主题为空,我会得到一个空指针异常-如果我不尝试将主题与“Ordretest”匹配,我不会得到空指针-任何提示都会有很大帮助:)

package-vildereMail;
导入java.util.Properties;
导入javax.mail.Address;
导入javax.mail.BodyPart;
导入javax.mail.Folder;
导入javax.mail.Message;
导入javax.mail.MessaginException;
导入javax.mail.Multipart;
导入javax.mail.Session;
导入javax.mail.Store;
导入javax.mail.internet.InternetAddress;
导入javax.mail.search.FromTerm;
导入javax.mail.search.SearchTerm;
导入javax.mail.search.SubjectTerm;
公共类邮件{
公共布尔匹配(消息){
试一试{
if(message.getSubject()包含(“Ordretest”)){
System.out.println(“找到匹配项”);
返回true;
}
}捕获(消息例外){
例如printStackTrace();
}
返回false;
};
公共静态void main(字符串[]args){
Properties props=System.getProperties();
props.setProperty(“mail.store.protocol”、“imaps”);
put(“mail.imap-mail.outlook.com.ssl.enable”、“true”);
props.put(“mail.pop3.host”、“outlook.com”);
props.put(“mail.pop3.port”,“995”);
props.put(“mail.pop3.starttls.enable”、“true”);
试一试{
Session Session=Session.getInstance(props,null);
Store Store=session.getStore();
store.connect(“imap mail.outlook.com,”myEmail@live.dk“,“我的密码”);
session.setDebug(true);
文件夹收件箱=store.getFolder(“收件箱”);
收件箱。打开(文件夹。只读);
SearchTerm发件人=新FromTerm(新Internet地址(“myMail@live.dk"));
Message[]messages=收件箱。搜索(发件人);
System.out.println(消息);
for(int i=0;i
在不知道在哪一行获得NPE(空指针异常)的情况下,我猜它发生在这里:

if (messages[i].getSubject().equals(null)) 
如果getSubject()返回null,并且您尝试执行.equals(),它将抛出一个NPE(因为您尝试调用一个方法)。 因此,尝试将其重写为(假设消息对象不能为null):

从哪里开始

你找到钥匙了吗

您可以删除所有属性设置,因为它们什么也不做,因为您使用的是“imaps”协议,而不是“pop3”协议


正如其他人所解释的,getSubject方法可能返回null,因此您需要检查它。

在哪一行获得NPE?nvm,null指针:)我在if(message.getSubject().contains(“Ordretest”){System.out.println(“match found”);return true;}处获得null指针NPE=NullPointerException。你应该有一个stacktrace,它应该引用你的类(包括行号)好的,这实际上对我有很大帮助:)将继续努力:)谢谢!有没有一种方法可以在已经打开的outlook应用程序中检查电子邮件而不使用api mail?比如,在本例中,我的用户已经打开了在后台运行的outlook应用程序-有什么方法可以利用它吗?比如,当程序启动并在后台运行时,你能搜索他的收件箱吗?
if (messages[i].getSubject().equals(null)) 
if (messages[i].getSubject() == null)