2016-09-22 4 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

Это метод, который я получаю из другого сообщения, но я не могу оглянуться назад ост. Деятельность является одним из моих объектов, сохраняющих тему и содержание.

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

Я вижу, что вы заменили использование API Spring с прямым использованием API JavaMail. Вам не нужно устанавливать свойство 'mail.smtps.auth', потому что вы вызываете метод подключения с именем пользователя и паролем явно. Кроме того, вы должны [заменить Session.getDefaultInstance на Session.getInstance] (http://www.oracle.com/technetwork/java/javamail/faq/index.html#commonmistakes). –

+0

@BillShannon У вас есть идеи, почему Spring API работает иногда, но иногда нет? Я также позвонил в брандмауэре. Но с API JavaMail он работает каждый раз. –

+0

Nope. Это потребует отладки. Но это похоже на работу для людей весны. –

 Смежные вопросы

  • Нет связанных вопросов^_^