这是我准备收件人列表的功能。
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);
我在回复中使用了相同的电子邮件列表。我不能在回复中使用多个电子邮件地址吗?
答案 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