我有一个java代码,用于发送电子邮件通过smtp协议在端口587。为此,我使用了javax mail api。我可以在本地主机( windows和ubuntu)机器上发送邮件。
当我创建了一个war文件并部署在安装了ubuntu操作系统的远程服务器上时,问题就出现了。此外,日志中没有错误。请帮助可能的原因和如何解决它。
下面是我的示例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();
}
}
编辑
这是session.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
谢谢。
发布于 2018-06-26 04:02:46
看起来您陷入了客户端向服务器宣布其名称的阶段。也许服务器不喜欢您没有使用有效的DNS名称的事实?如果客户端机器上的名称服务配置正确,JavaMail (通过JDK)应该能够确定客户端机器的DNS名称。由于这不起作用,您可以通过将DNS会话属性mail.smtp.localhost
设置为客户端计算机的有效完全限定的JavaMail主机名来覆盖它。
另请注意,您可以通过getting rid of the Authenticator简化代码。
发布于 2018-06-25 18:10:43
您必须告诉Transport
有关Session
的信息,然后连接它们并关闭Transport
,然后尝试
Transport smtpTransport = session.getTransport();
smtpTransport.connect();
smtpTransport.sendMessage(message, message.getAllRecipients());
smtpTransport.close();
而不是仅仅
Transport.send(message);
发布于 2018-10-01 11:14:41
我已经用java中的Email类找到了上述问题的答案。
final Email email = new Email();
String host = hostname;
Integer port = portNumber;
String from = emailFrom;
String pass = emailFromPassword;
String[] to = emailTo;
String msgBody = "Hello";
email.setFromAddress("", from);
email.setSubject("Demo");
for( int i=0; i < to.length; i++ ) {
email.addRecipient("", to[i], RecipientType.TO);
}
email.setTextHTML(msgBody);
new Mailer(host, port, from, pass).sendMail(email);
https://stackoverflow.com/questions/51020474
复制相似问题