我被这个问题严重困扰了。
我的程序成功地从我的 Windows 10 PC 和 Windows Server 2012 R2 Essential 发送电子邮件,但通过任何其他Windows Server 2012 版本显示发送成功,但电子邮件尚未送达。
尝试过所有组合SSL/TLS/无需身份验证以及所有端口465/587/26。
这是我正在使用的代码
String port = "26";
// Recipient's email ID needs to be mentioned.
String to = "*****@gmail.com";
// Sender's email ID needs to be mentioned
String host = "mail.*****.com.pk";
String username = "sales@*****.com.pk";//change accordingly
String password = "*****";//change accordingly
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.port", port);
// SSL Factory
// props.put("mail.smtp.socketFactory.class",
// "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.starttls.enable", "false");
System.out.println("TLS Settings False");
System.out.println("Sending with port: " + port);
// Get the Session object.
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
try {
// Create a default MimeMessage object.
Message message = new MimeMessage(session);
// Set From: header field of the header.
message.setFrom(new InternetAddress(username));
// Set To: header field of the header.
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(to));
// Set Subject: header field
message.setSubject("Testing Subject from ******.com.pk");
// Now set the actual message
message.setText("Hello, this is sample for to check send " +
"email using JavaMailAPI on personal workstation ");
// Send message
Transport.send(message);
System.out.println("Sent message successfully....");
} catch (MessagingException e) {
throw new RuntimeException(e);
}
我也尝试使用 Jodd Mail Library,它复制了同样的情况,这让我有理由相信操作系统是这里的问题
答案1
通常情况下,您会使用端口 465(隐式 TLS)或 587(显式 TLS/“STARTTLS”,或者,如果有必要,使用未加密提交)。端口 25(而不是 26)应用于邮件服务器之间的通信。
在对 MTA 接受但未送达收件人的邮件进行故障排除时,重要的问题是,从同一服务器发送的其他邮件的投递率如何,尤其是发送到显然会丢弃来自您的程序的邮件的同一域的其他邮件。
您可以通过多种方式来提高传递率,首先是安全的邮件服务器配置(即不成为垃圾邮件的来源),然后在 DNS+MTA 中正确应用 SPF、DKIM 和 DMARC 记录/标头。