Java 메일을 사용하여 이메일을 보내려는 것은 아니지만 작동하지 않습니다.

StackOverflow https://stackoverflow.com//questions/21029418

  •  21-12-2019
  •  | 
  •  

문제

암호 및 로그인을 재설정하려면 사용자가 관리자에게 전자 메일을 보내야하는 내 응용 프로그램에서 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>
.

도움이 되었습니까?

해결책

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

}
.

동일한 페이지로 이동하려는 경우 탐색 결과를 반환 한 다음 null을 반환해야합니다.

사용하는 JSF 버전을 알지 못하지만 일반적으로 이렇게해서 관리해야합니다 :

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

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top