2016-03-20 12 views
0

だから私はいくつかの説明が必要です。私はGoogleのSMTPサーバーを使用して電子メールを送信しようとしています。私のGoogle Appsアカウントを使用しています(無料のもので、リレーではありません)。私はwildfly 10のコンテナ(およびJSF)を使用していますので、私のプロジェクトにはjavamail jarがありません(それは正しいですか?)。だから私のステートレスEJBで、私は、リソースインジェクションを実行します。Wildfly javamailとmailsession injection SMTPサーバにHELOコマンドを送信できません

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

は、だから私は、私はポート、ユーザ名を定義する必要はありませんと仮定して、午前:

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

と私のstandalone.xmlに

スタンドアロンでのパスワード、私はちょうどこのようpropetiesを追加した場合:

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:失敗SMTPサーバーにHELOコマンドを送信

この作業を取得する方法上の任意のヘルプは歓迎です!ここで

は完全なコードです:

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(); 
    } 
} 

} 

これはまた、スタックトレースの一部であり、それは、Geronimoに問題があるだろうか?代わりに太陽を使うことができますか?もしそうなら、どうすればいいですか?

23:23:23215 ERROR [標準エラー](デフォルトタスク-5)org.apache.geronimo.javamail.transport.smtp.SMTPTransport.sendHelo(SMTPTransport.java:1914)で

23:23: 23:23216 ERROR [標準エラー](デフォルトのタスク[標準エラー](デフォルトタスク-5)org.apache.geronimo.javamail.transport.smtp.SMTPTransport.sendHandshake(SMTPTransport.java:1829)で

23 23215 ERROR -5)at org.apache.geronimo.javamail.transport.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:393)

答えて

関連する問題