【问题标题】:Email sending hangs in Spring with Java Mail使用 Java Mail 在 Spring 中发送电子邮件挂起
【发布时间】:2015-10-01 14:11:09
【问题描述】:

我正在尝试使用 spring 发送一封简单的邮件。

这是我在 java 配置中的邮件发件人 bean 定义。

    @Bean
    public JavaMailSender javaMailService() {
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        mailSender.setSession(getMailSession());
        return mailSender;
    }

    public Session getMailSession() {
        JndiTemplate template = new JndiTemplate();
        Session session = null;
        try {
            session = (Session) template.lookup("java:jboss/mail/Default");
        } catch (NamingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return session;
    } 

我正在运行的是 jboss wildfly,bean 的创建没有任何问题。

这是我发送电子邮件的代码。

@Autowired
private JavaMailSender mailSender;

@Override
public void sendMail(String mailTo, String subject, String content) throws MessagingException{
    MimeMessage message = mailSender.createMimeMessage();
    message.setSubject(subject);
    message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mailTo,false));
    mailSender.send(message);  
}

JavaMailSender 被正确注入。当我调试执行时,直到mailsender.send() 方法。它开始挂起。

看来jboss中的所有配置都是正确的。我还尝试在它自己的 bean 中指定邮件服务器参数。但它仍然无法正常工作。

我在这里做错了什么?

【问题讨论】:

  • 您的邮件会话是否在 JBoss 中正确配置? SMTP 服务器是否已启动并正在运行,您是否可以从 JBoss 实际连接到服务器。对我来说,这似乎是一个邮件会话配置问题。
  • 我正在使用 gmail smtp。我可以远程登录并连接到它。这就是我使用的:telent smtp.gmail.com 465
  • 这是我的 jboss 配置:
  • 挂起10分钟后抛出异常:原因:org.springframework.mail.MailSendException:邮件服务器连接失败;嵌套异常是 javax.mail.MessagingException:无法连接到 SMTP 主机:smtp.gmail.com,端口:465,响应:-1。失败的消息:javax.mail.MessagingException:无法连接到 SMTP 主机:smtp.gmail.com,端口:465
  • 期望清楚地表明 smtp 拒绝端口的连接。我希望你应该在 587 端口测试它

标签: java spring jakarta-mail


【解决方案1】:

虽然问题已经解决,但我遇到了类似的问题,上面提到的步骤和其他线程都没有工作。我必须另外将协议指定为 SMTPS 才能正常工作。所以这是我的工作代码 sn-p。

    @Bean
  JavaMailSender javaMailSender() {
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    mailSender.setHost(props.getHost());
    mailSender.setPort(props.getPort());
    mailSender.setUsername(props.getUsername());
    mailSender.setPassword(props.getPassword());

    Properties mailProperties = new Properties();
    mailProperties.put("mail.smtp.auth", props.getSmtp().isAuth());
    mailProperties.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    mailProperties.put("mail.smtp.starttls.enable", props.getSmtp().isStarttlsEnable());
    mailSender.setJavaMailProperties(mailProperties);
    mailSender.setProtocol("smtps");

    return mailSender;

  }

【讨论】:

    【解决方案2】:

    按照以下说明使用 Spring 和 Gmail 发送电子邮件:Email with Spring and Gmail

    您完全缺少身份验证部分。并确保 Gmail smtp 服务器地址正确。

    从上面的链接中获取这些必须是配置;

    <property name="host" value="smtp.gmail.com" />
        <property name="port" value="587" />
        <property name="username" value="username" />
        <property name="password" value="password" />
    
        <property name="javaMailProperties">
           <props>
                  <prop key="mail.smtp.auth">true</prop>
                  <prop key="mail.smtp.starttls.enable">true</prop>
               </props>
        </property>
    

    【讨论】:

      猜你喜欢
      • 2015-09-29
      • 1970-01-01
      • 1970-01-01
      • 2015-06-30
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多