使用JavaMail发送邮件时的地址无效

时间:2015-02-17 16:48:09

标签: java email javamail

这是我准备收件人列表的功能。

public static InternetAddress[] getRecipienEmail(boolean flag) {
        dbconf conf = new dbconf();
        try {
            String sql = null;
            if (flag) {
                sql = "select email_id from EMP_EMAIL_TEST WHERE to_char(dob,'MM-DD')=to_char(sysdate,'MM-DD')";
            } else {
                sql = "select email_id from EMP_EMAIL_TEST WHERE to_char(dob,'MM-DD')<>to_char(sysdate,'MM-DD') or DOB is NULL";
            }

            PreparedStatement preStatement = conf.getConnection().prepareStatement(sql);

            ResultSet result = preStatement.executeQuery();
            ArrayList email = new ArrayList();
            while (result.next()) {
                email.add(result.getString("email_id"));
            }
            InternetAddress[] address = new InternetAddress[email.size()];
            for (int i = 0; i < email.size(); i++) {
                address[i] = new InternetAddress(email.get(i).toString());
            }
            conf.getConnection().close();
            return address;
        } catch (SQLException | AddressException ex) {
           System.out.println(ex.getMessage());
            Logger.getLogger(EmpEmail.class.getName()).log(Level.SEVERE, null, ex);
        }
        return null;

    }

当我收到无效的收件人错误时。

这就是我调用上述功能的方法。请提出建议,这里有什么问题

message.setRecipients(Message.RecipientType.TO,
                    EmpEmail.getRecipienEmail(true));

请注意:表格包含电子邮件列表,并且始终会返回至少一个电子邮件地址。

更新

我发现了可能的问题。我刚发现在下面的代码行之后,应用程序通过异常。

message.setReplyTo(cc);

我在回复中使用了相同的电子邮件列表。我不能在回复中使用多个电子邮件地址吗?

2 个答案:

答案 0 :(得分:0)

您可以尝试查看阵列电子邮件中的内容。可能是空字符串作为值。使用调试器或将其打印到系统输出

for (int i = 0; i < email.size(); i++) {
    System.out.println("email[" + i + "]: " + email.get(i).toString());
    address[i] = new InternetAddress(email.get(i).toString());
}

答案 1 :(得分:0)

您可以在选择查询

中过滤掉空电子邮件和空电子邮件
select email_id from EMP_EMAIL_TEST WHERE to_char(dob,'MM-DD')=to_char(sysdate,'MM-DD') and email_id is not null 
select email_id from EMP_EMAIL_TEST WHERE to_char(dob,'MM-DD')<>to_char(sysdate,'MM-DD') or DOB is NULL and email_id is not null

您也可以使用Hibernate电子邮件验证器注释@Email http://docs.jboss.org/hibernate/validator/5.1/reference/en-US/html/chapter-bean-constraints.html#validator-defineconstraints-hv-constraints