首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >无法在远程服务器中发送电子邮件

无法在远程服务器中发送电子邮件
EN

Stack Overflow用户
提问于 2018-06-25 17:42:54
回答 3查看 223关注 0票数 -1

我有一个java代码,用于发送电子邮件通过smtp协议在端口587。为此,我使用了javax mail api。我可以在本地主机( windows和ubuntu)机器上发送邮件。

当我创建了一个war文件并部署在安装了ubuntu操作系统的远程服务器上时,问题就出现了。此外,日志中没有错误。请帮助可能的原因和如何解决它。

下面是我的示例spring-java代码

代码语言:javascript
复制
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);

代码语言:javascript
复制
 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

谢谢。

EN

回答 3

Stack Overflow用户

发布于 2018-06-26 04:02:46

看起来您陷入了客户端向服务器宣布其名称的阶段。也许服务器不喜欢您没有使用有效的DNS名称的事实?如果客户端机器上的名称服务配置正确,JavaMail (通过JDK)应该能够确定客户端机器的DNS名称。由于这不起作用,您可以通过将DNS会话属性mail.smtp.localhost设置为客户端计算机的有效完全限定的JavaMail主机名来覆盖它。

另请注意,您可以通过getting rid of the Authenticator简化代码。

票数 1
EN

Stack Overflow用户

发布于 2018-06-25 18:10:43

您必须告诉Transport有关Session的信息,然后连接它们并关闭Transport,然后尝试

代码语言:javascript
复制
    Transport smtpTransport = session.getTransport();
    smtpTransport.connect();
    smtpTransport.sendMessage(message, message.getAllRecipients());
    smtpTransport.close();

而不是仅仅

代码语言:javascript
复制
    Transport.send(message);
票数 0
EN

Stack Overflow用户

发布于 2018-10-01 11:14:41

我已经用java中的Email类找到了上述问题的答案。

代码语言:javascript
复制
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);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51020474

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档