我有一个Java代码,用于通过端口587上的smtp协议发送电子邮件。为此,我正在使用javax邮件api。我可以在localhost(Windows和ubuntu)计算机上发送邮件。
当我创建了war文件并将其部署在具有ubuntu OS的远程服务器上时,出现了问题,日志中没有错误。请帮助可能的原因以及解决方法。
这是我的示例spring-java代码
public void sendMailForResetPassword(String emailId ) throws AddressException, MessagingException {
EmailDataObject emailproperties=new EmailDataObject();
try {
Properties props = new Properties();
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", emailproperties.host_name);
props.put("mail.smtp.port", 587);
props.put("mail.smtp.ssl.trust", emailproperties.host_name);
props.put("mail.smtp.UseDefaultCredentials", false);
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication( emailproperties.from, emailproperties.password);
}
});
String link = "www.example.com";
System.out.println("This is best way for forgot password");
StringBuilder bodyText = new StringBuilder();
bodyText.append("<div>")
.append(" Dear User<br/><br/>")
.append(" We got your reset password request, Find below link to reset password <br/>")
.append(" Please click <a href=\""+link+"\">here</a> or open below link in browser<br/>")
.append(" <br/><br/>")
.append("</div>");
Message message = new MimeMessage(session);
message.setFrom(new InternetAddress(emailproperties.from));
message.setRecipients(Message.RecipientType.TO,
InternetAddress.parse(emailId));
message.setSubject("Reset Password");
message.setContent(bodyText.toString(), "text/html; charset=utf-8");
session.setDebug(true);
System.out.println(message);
Transport.send(message);
} catch (MessagingException e) {
e.printStackTrace();
}
}
修改
这是会话的输出。setDebug(true);
DEBUG SMTP: Found extension "ETRN", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "AUTH", arg "PLAIN LOGIN"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "DSN", arg ""
DEBUG SMTP: Found extension "SMTPUTF8", arg ""
STARTTLS 220 2.0.0 Ready to start TLS
EHLO ubuntu-minimal
谢谢。
答案 0 :(得分:1)
您似乎陷入了客户端向服务器宣布其名称的困境。也许服务器不喜欢您没有使用有效的DNS名称这一事实?如果正确配置了客户端计算机上的名称服务,则JavaMail(通过JDK)应该能够确定客户端计算机的DNS名称。由于这不起作用,您可以通过将JavaMail SMTP会话属性mail.smtp.localhost
设置为客户端计算机的有效标准DNS主机名来覆盖它。
请注意,您可以通过getting rid of the Authenticator简化代码。
答案 1 :(得分:0)
您必须将Transport
告诉Session
并连接它们,然后关闭Transport
,请尝试
Transport smtpTransport = session.getTransport();
smtpTransport.connect();
smtpTransport.sendMessage(message, message.getAllRecipients());
smtpTransport.close();
不只是
Transport.send(message);
答案 2 :(得分:0)
我在Java中使用Email类找到了以上问题的答案。
npm run build