我需要用Java发送电子邮件,遇到一个我似乎无法解决的问题。我收到以下错误消息:
javax.mail.SendFailedException:无效地址;嵌套异常是: com.sun.mail.smtp.SMTPAddressFailedException: 550 5.7.1服务不可用;客户端xx.xx被zen.spamhaus.org阻塞
我不明白的部分是,上面将IP地址伪装为xx.xx.xx.xx的部分实际上是我的开发计算机公共IP地址,并且没有以任何方式连接到我正在使用的邮件服务器。
邮件服务器是我自己的,我可以通过我尝试过的所有其他渠道发送邮件(node.js应用程序,email-client,.)服务器不在任何阻塞列表中。
我使用的代码如下:
public class SendMailExample {
public void sendMail(String smtpHost,String username,String password,String senderAddress,String recipientsAddress,String subject,String text ){
MailAuthenticator auth = new MailAuthenticator(username, password);
Properties properties = new Properties();
properties.put("mail.smtp.host", smtpHost);
properties.put("mail.smtp.auth", "true");
Session session = Session.getDefaultInstance(properties, auth);
try {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(senderAddress));
msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(
recipientsAddress, false));
msg.setSubject(subject);
msg.setText(text);
msg.setHeader("Test", "Test");
msg.setSentDate(new Date( ));
Transport.send(msg);
}
catch (Exception e) {
e.printStackTrace( );
}
}
class MailAuthenticator extends Authenticator {
// more code - I think unrelated
}
public static void main(String[] args) {
String username = "xxx@xxx.com";
String password = "pass";
String senderAddress ="xxx@xxx.com";
String recipientsAddress = "some@one.com";
String subject = "Test";
String text = "text";
String smtpHost = "smtp.myMailServer.com";
new SendMailExample().sendMail(smtpHost, username, password, senderAddress, recipientsAddress, subject, text);
}
}发布于 2016-05-11 16:58:21
通过更改以下内容解决了这个问题:
添加:
properties.put("mail.smtp.starttls.enable", "true");到属性部分,而不是
Transport.send(msg);我现在用
Transport transport = session.getTransport("smtp");
transport.connect(smtpHost, 587, username, password);
msg.saveChanges();
transport.sendMessage(msg, msg.getAllRecipients());
transport.close();https://stackoverflow.com/questions/37167835
复制相似问题