2013-05-10 3 views
0

Я пытаюсь отправить как по электронной почте с помощью JavaMail API, с помощью моего аккаунта Gmail, но я получаю исключение, javax.mail.MessagingExceptionjavax.mail.MessagingException при отправке почты с помощью JavaMail API

Кодекс:

public static Result sendMail() { 

     Map < String, String[] > values = request().body().asFormUrlEncoded(); 

     String toAddresses = values.get("toaddrs")[0]; 
     String subject = values.get("subject")[0]; 
     String body = values.get("body")[0]; 

     Properties props = new Properties(); 
     props.put("mail.smtp.host", "smtp.gmail.com"); 
     props.put("mail.smtp.socketFactory.port", "465"); 
     props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory"); 
     props.put("mail.smtp.auth", "true"); 
     props.put("mail.smtp.port", "465"); 

     Session session = Session.getDefaultInstance(props, new javax.mail.Authenticator() { 
      protected PasswordAuthentication getPasswordAuthentication() { 
       return new PasswordAuthentication("[email protected]", "samplepass"); 
      } 
     }); 

     try { 

      Message message = new MimeMessage(session); 
      message.setFrom(new InternetAddress("[email protected]")); 
      message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(toAddresses)); 
      message.setSubject(subject); 
      message.setText(body); 

      Transport.send(message); 
      return ok("sent"); 

     } catch (MessagingException e) { 
      return ok("Error in sending email"); 
     } 


    } 

на отладку, я в конечном итоге здесь в classs Service Service class

, который бросает исключение: javax.mail.MessagingException: Host, username, and password must be specified.

ответ

0

Спасибо за ответы. Проблема оказалась странной, по крайней мере, для новичка, подобного мне. Проще говоря, у меня были библиотеки exjello в моем классе. Они возились с моим API JavaMail. Как только я создал новый проект и скопировал свой код там, он работал нормально. Чтобы проверить, я скопировал контейнеры exjello в путь к классу новых проектов, и он перестал работать.

С точки зрения непрофессионала это не кажется хорошей идеей для файла jar, который может испортить мое исполнение, даже если я даже не импортировал пакет в свой класс.

0

Единственные различия, которые я могу найти код, который я использую для отправки электронной почты (и который работает) заключается в следующем:

Properties props = System.getProperties();// get system props? 
    props.put("mail.smtp.socketFactory.fallback", "false"); 

и msg.setSentDate (новая дата());

вы также можете добавить: session.setDebug (true); это может дать дополнительные подсказки.

На какой строке исключено исключение?

+0

на 'Transport.send (message);' –

1

Исправить эти common mistakes. Если он все еще не работает, отправьте сообщение debug output.

+0

Спасибо за эту информацию, и я изменил свой код соответственно, но мне было интересно; Являются ли эти «ошибки» или лучшие практики, потому что мой код работает нормально, даже если я использую 'Session.getDefaultInstance' в противоположность тому, что указано. То же самое для других пунктов. –

+0

Вы можете назвать их «лучшими практиками», если хотите, но из-за них многие люди нарушают программы. Почти никто, кто делает какие-либо из этих вещей, не знает **, почему ** они это делают, они просто вырезают и вставляют код из другого места. –

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