2015-10-24 7 views
1

У меня есть класс почтовой службы, который отправляет электронную почту с помощью Gmail SMTP, он успешно работает до недавнего прошлого, тот же класс не может отправлять электронные письма, и я даже не см. любые сообщения об ошибках, когда я отлаживаю или запускаю этот код. Любая идея, что происходит?Java mail API не отправляет электронные письма

public class MailService { 

public static void sendEmail(String subject, String msgBody, String[] toEmails, 
     String[] ccEmails, String[] bccEmails, 
     String fromEmail, String toName){ 

    Properties props = System.getProperties(); 
     props.put("mail.smtp.starttls.enable", true); // added this line 
     props.put("mail.smtp.host", "smtp.gmail.com"); 
     props.put("mail.smtp.user", "mygmail-id"); 
     props.put("mail.smtp.password", "mypassword"); 
     props.put("mail.smtp.port", "587"); 
     props.put("mail.smtp.auth", true); 



     Session session = Session.getInstance(props,null); 
    List<InternetAddress> toAdresses = null; 
    List<InternetAddress> ccAdresses = null; 
    List<InternetAddress> bccAdresses = null; 
    try { 
     Message msg = new MimeMessage(session); 
     msg.setFrom(new InternetAddress(fromEmail)); 
     toAdresses = new ArrayList<InternetAddress>(); 
     ccAdresses = new ArrayList<InternetAddress>(); 
     bccAdresses = new ArrayList<InternetAddress>(); 
     for(String toEmail: toEmails){ 
      toAdresses.add(new InternetAddress(toEmail)); 
     } 
     if(ccEmails != null && ccEmails.length > 0) 
     for(String ccEmail: ccEmails){ 
      ccAdresses.add(new InternetAddress(ccEmail)); 
     } 
     if(bccEmails != null && bccEmails.length > 0) 
     for(String bccEmail: bccEmails){ 
      bccAdresses.add(new InternetAddress(bccEmail)); 
     } 
     msg.addRecipients(Message.RecipientType.TO, 
       toAdresses.toArray(new InternetAddress[toAdresses.size()])); 
     msg.addRecipients(Message.RecipientType.CC, 
       ccAdresses.toArray(new InternetAddress[ccAdresses.size()])); 
     msg.addRecipients(Message.RecipientType.BCC, 
       bccAdresses.toArray(new InternetAddress[bccAdresses.size()])); 
     msg.setSubject(subject); 
     msg.setContent(msgBody, "text/html"); 
     Transport.send(msg); 

    } catch (AddressException e) { 
     e.printStackTrace(); 
    } catch (MessagingException e) { 
     e.printStackTrace(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     // ... 
    } 
} 
+1

Вы взглянули на [это] (http://www.mkyong.com/java/javamail-api-sending-email-via-gmail-smtp -example /) или [this] (http://stackoverflow.com/questions/15597616/sending-email-via-gmail-smtp-server-in-java)? – MadProgrammer

+0

Этот код никогда не будет работать. Нет свойства mail.smtp.password. Вы не делаете ничего, чтобы передать имя пользователя и пароль на транспорт. Используйте один из методов подключения, который позволяет вам передавать имя пользователя и пароль и не утруждать себя настройкой их как свойств. –

+0

@MadProgrammer, я пробовал все пути, один из них - один из вариантов, которые я пробовал, но никто из них не работает. – user1614862

ответ

0

две вещи:

Как предложил @Bill Шеннон, вы должны пойти с Authenticator вместо того, чтобы полагаться на недвижимость в одиночку:

Session session = Session.getInstance(props, new Authenticator() { 

      @Override 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication("my-gmail-id", "mypassword"); 
      } 

     }); 

Но даже тогда - Gmail будет блокировать сообщения от отправляется из-за проблем с безопасностью и дает this link для получения дополнительной информации.

0

Также Добавить эти свойства также

Properties properties = System.getProperties(); 
    properties.setProperty("mail.smtp.host", host); 
    properties.put("mail.smtp.auth", "true"); 
    properties.put("mail.smtp.starttls.enable", "true"); 
    properties.put("mail.smtp.ssl.enable", "true");