2016-09-22 64 views
1

我通过Gmail通过我的网络应用发送电子邮件。Java通过Gmail发送电子邮件,有时候有时会挂起

但是,有时它工作正常,但有时它只是停止没有任何消息。

有谁知道如何解决这个问题?

在我的春天AppConfig.java

@Bean 
    public JavaMailSender getMailSender(){ 
     JavaMailSenderImpl mailSender = new JavaMailSenderImpl(); 
     mailSender.setHost("smtp.gmail.com"); 
     mailSender.setPort(587); 
     mailSender.setUsername("my email from"); 
     mailSender.setPassword("my email password"); 

     Properties javaMailProperties = new Properties(); 
     javaMailProperties.put("mail.smtp.starttls.enable", "true"); 
     javaMailProperties.put("mail.smtp.auth", "true"); 
     //javaMailProperties.put("mail.transport.protocol", "smtps"); 
     javaMailProperties.put("mail.transport.protocol", "smtp"); 
     javaMailProperties.put("mail.debug", "true"); 

     mailSender.setJavaMailProperties(javaMailProperties); 
     return mailSender; 
    } 

在我mailService.java

public void sendEmailWithTemplate(Activity activity, Object object) { 
     Member member = (Member) object; 

     MimeMessagePreparator verificationEmail = getEmailFromActivity(activity, member); 

     try { 
      mailSender.send(verificationEmail); 
      System.out.println("Message sent............................."); 
     } catch (MailException ex) { 
      System.err.println(ex.getMessage()); 
     } 
    } 

private MimeMessagePreparator getEmailFromActivity(final Activity activity, final Member member) { 

     MimeMessagePreparator preparator = new MimeMessagePreparator() { 

      public void prepare(MimeMessage mimeMessage) throws Exception { 
       MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true); 

       helper.setSubject(activity.getActivity_subject()); 
       helper.setFrom("my from email"); 
       helper.setTo(member.getEmail()); 

       String mailContent = activity.getActivity_content(); 

       helper.setText(mailContent, true); 


      } 
     }; 
     return preparator; 
    } 

有时它工作正常,我将能够发送邮件,但有时仅仅是停止加在20分钟以上:

DEBUG SMTP: enable SASL 
DEBUG SMTP: useEhlo true, useAuth false 
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false 
+0

听起来像一个网络问题。你有防火墙或防病毒软件吗?尝试设置[连接超时](https://javamail.java.net/nonav/docs/api/com/sun/mail/smtp/package-summary.html#mail.smtp.connectiontimeout)。 –

+0

嗨,雅,但我关闭防火墙和反病毒,但仍然是一样的。然而,它的好处,因为我尝试从其他职位的另一种方法,现在它的工作正常。但是太糟糕了,我无法回头检查帖子 –

+0

你究竟做了什么改变才能使之发挥作用? –

回答

0

这是我从其他帖子得到的方法,但我不能回头看p OST。 活动是我的一个存储主题和内容的对象。

public void sendEmailWithActivity(Activity activity, Object object, String path) { 
     try { 
      Member member = (Member) object; 
      String host = "smtp.gmail.com"; 
      String username = "email"; 
      String password = "password"; 
      String body = activity.getActivity_content(); 
      String name = activity.getActivity_name(); 
      String subject = activity.getActivity_subject();= 


      //Set the properties 
      Properties props = new Properties(); 
      props.put("mail.smtps.auth", "true"); 
      // Set the session here 
      Session session = Session.getDefaultInstance(props); 
      MimeMessage msg = new MimeMessage(session); 
      // set the message content here 
      msg.setSubject(subject); 
      msg.setContent(body, "text/html"); 
      msg.setFrom(new InternetAddress(username)); 
      msg.addRecipient(Message.RecipientType.TO, 
        new InternetAddress(member.getEmail())); 
      Transport t = session.getTransport("smtps"); 

      t.connect(host, username, password); 
      t.sendMessage(msg, msg.getAllRecipients()); 
      t.close(); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } finally { 

     } 

    } 
+0

我发现你已经用Spring API直接使用了JavaMail API来取代它。您不需要设置'mail.smtps.auth'属性,因为您明确地使用用户名和密码来调用connect方法。另外,你应该[用Session.getInstance替换Session.getDefaultInstance](http://www.oracle.com/technetwork/java/javamail/faq/index.html#commonmistakes)。 –

+0

@BillShannon你知道为什么Spring API有时会工作,但有时候不行吗?我也允许在防火墙的服务。但随着JavaMail API的每次工作。 –

+0

没有。这将需要调试。但这对于春天的人来说似乎是一份工作。 –

相关问题