cercando di inviare una e-mail usando la posta Java ma non funziona
Domanda
Ho una pagina JSF nella mia applicazione in cui l'utente dovrebbe inviare un'e-mail all'amministratore per resettare la sua password e il login.Ho scritto il codice e ho aggiunto i vasetti al buildPath ma quando faccio clic sul pulsante Invia, la pagina viene aggiornata e l'e-mail non viene inviata alla destinazione e non c'è eccezione visualizzata Non riesco a capire cosa c'è che non va Codice aggiornato secondo Ramiq Risposta Questo è il codice gestito
@ManagedBean(name="sendMail")
@SessionScoped
public class SendMail implements java.io.Serializable{
private static final long serialVersionUID = 1L;
private String to = "toadress";
private String objet = "Compte inaccessible";
private String body = "Mon compte "
+ getNom()
+ " "
+ getPrenom()
+ " n'est plus accessible.Veuillez s'il vous plaît réinitialiser mes cordonnées et les envoyer à mon email "
+ getFrom();
private String from = "fromadress";
private String smtpServer = "smtp.orange.tn";
private String nom;
private String prenom;
public void send() {
Properties props =new Properties();
props.put("mail.smtp.host", smtpServer);
props.put("mail.debug", "true");
Session session = Session.getInstance(props);
try {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = {new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject(objet);
msg.setSentDate(new Date());
msg.setText("Mail Body ....");
Transport.send(msg);
System.out.println("Message Sent Ok");
FacesMessage msg2 = new FacesMessage("E-mail envoyé avec succés");
FacesContext.getCurrentInstance().addMessage(null, msg2);
} catch (MessagingException ex) {
ex.printStackTrace();
}
}
.
E questo è il codice di pagina
<h:form id="f1">
<br></br>
<div class="centre">
<p:inputText placeholder="Nom" required="true" id="nom"
value="#{sendMail.nom}"
validator="#{AdministrateurBean.checkAdmin}"></p:inputText>
<h:messages style="color:red" for="nom"/>
</div>
<div class="centre">
<p:inputText placeholder="Prénom" required="true"
value="#{sendMail.prenom}" id="prenom" ></p:inputText>
<h:messages style="color:red" for="prenom"/>
</div>
<div class="centre">
<p:inputText placeholder="xyz@exemple.com" required="true" id="email"></p:inputText>
<h:messages style="color:red" for="email"/>
</div>
<div class="centre">
<p:button value="Envoyer" size="30" style="width:207px"
action="#{sendMail.send}" update="f1"></p:button>
</div>
</h:form>
</div>
. Soluzione
... send (String smtpServer,String to,String rom, String objet,String body){
.
Il nome del parametro diAddress è " ROM ", ma lo usi come " da ".
In generale, facendolo in questo modo dovrebbe funzionare:
String to = "sendToMailAddress";
String from = "sendFromMailAddress";
String host = "smtp.yourisp....";
Properties props = new Properties();
props.put("mail.smtp.host", host);
props.put("mail.debug", "true");
Session session = Session.getInstance(props);
try {
Message msg = new MimeMessage(session);
msg.setFrom(new InternetAddress(from));
InternetAddress[] address = {new InternetAddress(to)};
msg.setRecipients(Message.RecipientType.TO, address);
msg.setSubject("Test Subject");
msg.setSentDate(new Date());
msg.setText("Mail Body ....");
Transport.send(msg);
}
catch (MessagingException mex) {
mex.printStackTrace();
}
.
Aggiornamento: Il tuo metodo di azione DosendMail non sarà licenziato! Ha un parametro actionEvent, questo è necessario solo se questo metodo è per ActionListener non per azione, rimuovere questo parametro
public void doSendMail(ActionEvent e)
.
a
public String doSendMail(){
....
return null;
}
.
Un metodo di azione dovrebbe restituire un risultato di navigazione, se si desidera navigare sulla stessa pagina, quindi restituire Null.
Non so quale versione JSF utilizzi, ma in generale dichiara i tuoi gestiti come questo dovrebbe funzionare:
@ManagedBean(name="sendMail")
@SessionScoped
public class SendMail implements java.io.Serializable{
.