我正在使用javax.mail系统,并遇到"无效地址"异常的问题.以下是代码的基础知识:
// Get system properties
Properties props = System.getProperties();
// Setup mail server
props.put("mail.smtp.host", m_sending_host);
// Get session
Session session = Session.getDefaultInstance(props, new Authenticator(){
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(m_sending_user, m_sending_pass);
}
});
// Define message
MimeMessage message = new MimeMessage(session);
message.setFrom(new InternetAddress(m_sending_from));
message.addRecipient(Message.RecipientType.TO,
new InternetAddress(vcea.get(i).emailaddr));
message.setSubject( replaceEnvVars(subject) );
message.setText(replaceEnvVars(body));
// Send message
try {
Transport.send(message);
} catch (Exception e){
Log.Error("Error sending e-mail to addr (%s): %s",
vcea.get(i).emailaddr, e.getLocalizedMessage() );
}
Run Code Online (Sandbox Code Playgroud)
问题是上面的代码确实有效.但是对于我知道有效的某些电子邮件地址(因为我可以通过标准电子邮件客户端发送给他们),上述代码在尝试发送时会抛出"无效地址"异常.
任何线索或提示将不胜感激.
- 更新:身份验证问题.
好的,这是我发现的事情.接收电子邮件时,上面的代码正确设置了身份验证,并且实际调用了Authenticator.getPasswordAuthentication()回调.
发送电子邮件时不是这样.你必须做更多.添加这个:
// …Run Code Online (Sandbox Code Playgroud)