我在我的应用程序中有一个JSF页面,用户应该向管理员发送电子邮件,以便重置他的密码并登录。我确实编写了代码并将罐子添加到BuildPath,但是当我点击发送按钮时,页面刷新并将电子邮件发送到目的地,并且没有显示出例外我无法弄清楚什么是错的 根据Ramiq答案的更新代码 这是ManagedBean代码

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

,这是页面代码

        <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>
.

有帮助吗?

解决方案

... send (String smtpServer,String to,String rom, String objet,String body){
.

fromAddress的参数名称是“ rom ”,但您将其用作“”。

通常,这种方式应该工作:

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

更新: 您的动作方法 dosendmail 将不会被解雇! 它具有一个ActionEvent参数,只有需要此方法是否适用于ActionListener,删除此参数

public void doSendMail(ActionEvent e)
.

    public String doSendMail(){
    ....
    return null;

}
.

如果要导航到同一页面,则应返回Action方法,然后返回NULL。

我不知道您使用的JSF版本,但通常在这样的情况下宣告您的ManagedBean应该工作:

 @ManagedBean(name="sendMail")
 @SessionScoped
 public class SendMail implements java.io.Serializable{
.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top