尝试使用java邮件发送电子邮件,但它无法正常工作

时间:2014-01-09 19:31:00

标签: javamail jsf-2.2

我的应用程序中有一个jsf页面,用户应该向管理员发送一封电子邮件,以便重置密码和登录。我写了代码并将jar添加到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>

1 个答案:

答案 0 :(得分:1)

... 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参数,只有当这个方法是for actionlistener而不是action时才需要这个参数,删除这个参数

public void doSendMail(ActionEvent e)

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

}

动作方法应返回导航结果,如果要导航到同一页面,则返回null。

我不知道您使用的是哪个JSF版本,但通常会声明您的管理员应该可以使用:

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