2011-10-16 18 views
6

sto creando un'applicazione web utilizzando jsf e primefaces e la mia domanda è come inviare una email tramite il modulo di contatto del sito (l'ho fatto usando php in precedenza, molto facilmente, ma mai usando JSF). Ho creato un modulo sulla pagina contact.xhtml, così come una classe bean per supportarlo, e tutto ciò che dovrebbe fare è inviare i dati del bean a una posta predefinita (per es. Gmail). Ho anche trovato diversi "tutorial" su come inviare email usando JavaMail, ma niente sembra funzionare correttamente. Il modulo stesso, composto da nome, e-mail e campi messaggio.Invia posta dalla pagina JSF usando i fagioli

Qualcuno può scrivere come farlo o darmi un collegamento. Sarei molto grato.

Ho bisogno che il mio sito sia in esecuzione sul server (online) oppure posso verificarlo da localhost.

Grazie in anticipo.

+0

Avete un server SMTP o almeno il nome host, il numero di porta e la password del server SMTP? Che server Java EE stai usando? (Tomcat, Glassfish, ecc.). È "facile" in PHP perché molti server di hosting sono già preconfigurati per questo. Devi solo chiamare la funzione 'mail()'. O devi solo inserire la configurazione dell'host SMTP in qualche file ini. Tomcat non supporta questa preconfigurazione (supporta solo JSP/Servlet out, non JavaMail, quindi devi scrivere tu stesso l'intero codice), ma Glassfish ad esempio lo supporta (JavaMail è precisamente parte del profilo web Java EE). – BalusC

+0

Si prega di notare che questo problema non è correlato a JSF in generale. Questo è legato al server di destinazione e alla sua configurazione.A seconda di ciò, si può semplicemente utilizzare la sua risorsa JNDI JavaMail o scrivere autonomamente un bel po 'di codice boilerplate. – BalusC

risposta

6

In brevissimo:

  • fare una <h:commandButton action="#{yourBean.send}"
  • fare un bean gestito annotato con @ManagedBean("yourBean") che ha un metodo send(..)
  • ottenere commons-email e leggere la sua breve "Manuale d'uso"; avere un server smtp di lavoro (commons-mail dipende JavaMail, in modo da ottenere che nel classpath pure)
  • nel metodo send uso commons-mail per inviare l'e-mail

(si dovrebbe passare attraverso un JSF tutorial per vedere come raccogliere i parametri del modulo)

Nota che java è un po 'più complesso. "Invia posta tramite JSF" non è una domanda particolarmente valida. Si compone di due domande:

  • come avere un formulario presentato con JSF (ogni tutorial spiega che)
  • come inviare e-mail in Java in generale
2

E 'tutto su come catturare l'output JSF. Il mio approccio è solo quello di chiamare la pagina JSF tramite JAX-RS, catturare l'output e metterlo in e-mail. Fai attenzione a rendere la pagina il più semplice possibile (a JSF piace aggiungere un sacco di codice JS) e imposta URL assoluti alle risorse. Ecco il mio codice (semplificato):

@Resource(name = "mail/mySession") 
Session mailSession; 

//make request, capture output 
Client client = ClientBuilder.newClient(); 
String htmlBody = 
     client.target("http://localhost:8080/AppName/jsfpage.xhtml") 
     .queryParam("id", 10) //we can add some params 
     .request() 
     .get(String.class); 

//send email 
Message message = new MimeMessage(mailSession); 
message.setFrom(); 
message.setRecipients(Message.RecipientType.TO, InternetAddress.parse("[email protected]")); 
message.setHeader("X-Mailer", "JavaMail"); 
message.setSubject("Subject here"); 
message.setContent(htmlBody, "text/html; charset=utf-8"); //set captured html as content 
message.setSentDate(new Date()); 
Transport.send(message);