2016-03-20 5 views
0

Так что мне нужно уточнение. Я пытаюсь отправить электронную почту с помощью Google SMTP-сервера, используя мои учетные записи google (бесплатная вещь, а не реле). Я использую контейнер wildfly 10 (и JSF), поэтому у меня нет javamail jar в моем проекте (это правильно?). Так что в моем безгосударственном EJB, я делаю инъекцию ресурса:Утилита javamail и электронной почты Wildfly Отказ отправки команды HELO на SMTP-сервер

@Resource(name = "mail") 
private javax.mail.Session mailSession; 

и в моем standalone.xml:

<subsystem xmlns="urn:jboss:domain:mail:2.0"> 
     <mail-session name="mail" jndi-name="java:/mail"/> 
</subsystem> 

Так я предполагая, у меня нет, чтобы определить порт, имя пользователя и пароль в автономной, если я просто добавить СВОЙСТВ так:

Properties props = System.getProperties(); 
    String host = "smtp.gmail.com"; 
    props.put("mail.smtp.starttls.enable", "true"); 
    props.put("mail.smtp.host", host); 
    props.put("mail.smtp.user", "[email protected]"); 
    props.put("mail.smtp.password", "XXXX"); 
    props.put("mail.smtp.port", "465"); 
    props.put("mail.smtp.ssl.enable", "true"); 
    props.put("mail.smtp.auth", "true"); 

    mailSession = Session.getDefaultInstance(props, 
      new javax.mail.Authenticator(){ 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(
         "[email protected]", "XXXX");// Specify the Username and the PassWord 
       } 
     }); 

правильно ли это, или это нужно быть также определены в standalone.xml?

Так я получаю ошибку: javax.mail.MessagingException: Сбой отправки команды HELO на SMTP-сервер

Любая помощь о том, как получить эту работу оценили!

Вот полный код:

import java.util.ArrayList; 
import java.util.List; 
import java.util.Properties; 
import javax.annotation.PostConstruct; 
import javax.annotation.Resource; 
import javax.ejb.Stateless; 
import javax.faces.component.UIInput; 
import javax.mail.Address; 
import javax.mail.BodyPart; 
import javax.mail.Message; 
import javax.mail.Multipart; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeBodyPart; 
import javax.mail.internet.MimeMessage; 
import javax.mail.internet.MimeMultipart; 
import javax.persistence.EntityManager; 
import javax.persistence.PersistenceContext; 

//import view.Info; 
@Stateless 
public class EmailEJB implements EmailBeanInterface { 


@Resource(name = "mail") 
private javax.mail.Session mailSession; 

@PersistenceContext(unitName = "EmailEJB") 
EntityManager em; 

String amountToDisplay = null; 
List<Info> emailList; 



public void setAmountToDisplay(String amountToDisplay) { 
    this.amountToDisplay = amountToDisplay; 
} 

@PostConstruct 
public void defaultList() { 
    String sqlPrepareStmt = "SELECT e FROM Info e WHERE id <=" + amountToDisplay; 
    emailList = (List<Info>) em.createQuery(sqlPrepareStmt, Info.class).getResultList(); 
} 

public List<Info> getEmailList() { 
    return emailList; 
} 

public void send(ArrayList<String> managedList) { 

    Properties props = System.getProperties(); 
    String host = "smtp.gmail.com"; 
    props.put("mail.smtp.starttls.enable", "false"); 
    props.put("mail.smtp.host", host); 
    props.put("mail.smtp.user", "[email protected]"); 
    props.put("mail.smtp.password", "XXXX"); 
    props.put("mail.smtp.port", "465"); 
    props.put("mail.smtp.ssl.enable", "true"); 
    props.put("mail.smtp.auth", "true"); 
    //Session mailSession = Session.getDefaultInstance(props); 
    // mailSession= Session.getDefaultInstance(props); 
    mailSession = Session.getDefaultInstance(props, 
      new javax.mail.Authenticator(){ 
       protected PasswordAuthentication getPasswordAuthentication() { 
        return new PasswordAuthentication(
         "XXXX", "XXXX");// Specify the Username and the PassWord 
       } 
     }); 
    try { 
     MimeMessage m = new MimeMessage(mailSession); 
     Address from = new InternetAddress("[email protected]"); 
     Address[] to; 
     to = new Address[managedList.size()]; 
     for (int i = 0; i < managedList.size(); i++) { 
      String emailString = managedList.get(i); 
      if(emailString.isEmpty() == true){ 
       System.out.println("emailString is empty"); 
      } 
      else{ 
      to[i] = new InternetAddress(java.net.IDN.toASCII(emailString)); 
      } 
     } 

     m.setRecipients(Message.RecipientType.TO, to); 
     m.setSubject("Wildfly 10 - Checkbox test"); 
     m.setSentDate(new java.util.Date()); 
     BodyPart messageBodyPart = new MimeBodyPart(); 

     // Fill the message 
     messageBodyPart.setText("testing application managed javamail props"); 

     // Create a multipart message 
     Multipart multipart = new MimeMultipart(); 

     // Set text message part 
     multipart.addBodyPart(messageBodyPart); 
     m.setContent(multipart); 
     Transport transport = mailSession.getTransport("smtp"); 
     transport.connect(host, "[email protected]", "XXXX"); 
     transport.send(m); 
     transport.close(); 
     System.out.println("Mail sent!"); 


    } catch (javax.mail.MessagingException e) { 
      e.printStackTrace(); 
    } 
} 

} 

Это также является частью трассировки стека, это может быть проблема с Джеронимо? Могу ли я использовать солнце вместо этого, если да, то как я это делаю?

23: 23: 23215 ОШИБКА [STDERR] (по умолчанию задача-5) при org.apache.geronimo.javamail.transport.smtp.SMTPTransport.sendHelo (SMTPTransport.java:1914)

23:23: 23215 ОШИБКА [STDERR] (по умолчанию задача-5) при org.apache.geronimo.javamail.transport.smtp.SMTPTransport.sendHandshake (SMTPTransport.java:1829)

23: 23: 23216 ОШИБКА [STDERR] (задача по умолчанию -5) at org.apache.geronimo.javamail.transport.smtp.SMTPTransport.protocolConnect (SMTPTransport.java:393)

ответ

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