即使条件包含指定数据,条件也会变为 false

Condition gets false even if it contains specified data

我正在尝试使用 JAVA MAIL API 处理邮件。我想检查来自 来自 特定电子邮件 ID 的电子邮件,所以我正在检查:

   for(int i=0;i<messages.length;i++)
   {
       if(messages[i].getFrom().toString().equalsIgnoreCase("seller-notification@amazon.com"))
       {
           System.out.println(messages[i].getContent());

           Multipart mp = (Multipart)messages[i].getContent();  
           Object Body = mp.getBodyPart(i).getContent();
           String Content = Body.toString();
       }

}

调试模式屏幕,我可以在调试中看到 from 中的值:

以上条件不成立。

这是因为它不是字符串,而您正在尝试比较 ObjecttoString() 方法和 String。由于此 toString 不会 return 您想要的,您必须将其转换为 Address 并从那里获取电子邮件。

尝试:

Address[] froms = messages[i].getFrom();
String email = froms == null ? null : ((InternetAddress) froms[0]).getAddress();
if("seller-notification@amazon.com".equalsIgnoreCase(email))
{//Your work}

问题是 toString 生成“[Seller Notification]”,这不等于 "seller-notification@amazon.com"。

您应该转换到 InternetAddress(以防万一之前检查),提取电子邮件并检查电子邮件。

.getFrom() 方法 returns Address 数据类型对象数组。因此,首先您必须 select 数组元素之一并将其转换为 InternetAddress 数据类型。见下方代码

if(((InternetAddress)(messages[i].getFrom()[0])).getAddress().equalsIgnoreCase("seller-notification@amazon.com"))
{
    //your remaining code
}

如果解决了您的问题,请标记为答案

messages[i].getFrom().toString()** 仅提供字节值..)-您需要使用此行转换为字符串

        InternetAddress.toString(messages[i].getFrom());