0
 @Override
public void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {

    PrintWriter out = null;
    String user = request.getParameter("username");
    Users p = usb.getMemberInfo(user);
    HttpSession session1 = request.getSession(true);
    request.getSession().setAttribute("passenger", p);

    String host = "smtp.gmail.com";
String username =     // to write sender email here 
String password =   // To Write Password here
Properties properties = System.getProperties();
properties.put("mail.smtp.starttls.enable", "true");
properties.put("mail.smtp.host", host);
properties.put("mail.smtp.username", username);
properties.put("mail.smtp.password", password);
properties.put("mail.smtp.port", "587");
properties.put("mail.smtp.auth", "true");

String to = (String)session1.getAttribute(p.getEmail());
try {
    Session session = Session.getDefaultInstance(properties, null);
    MimeMessage message = new MimeMessage(session);
    message.setFrom(new InternetAddress(username));

    InternetAddress toAddress = new InternetAddress(to);


    System.out.println(Message.RecipientType.TO);

    //for (int i = 0; i < toAddress.length; i++) { // changed from a while loop
        message.addRecipient(Message.RecipientType.TO, toAddress);
    //}
    message.setSubject("Forgot password");
    message.setText(p.getPassword());
    Transport transport = session.getTransport("smtp");
    transport.connect(host, username, password);
    transport.sendMessage(message, message.getAllRecipients());
    transport.close();
} catch (Exception e) {
    e.printStackTrace();
}

    response.sendRedirect("welcome.jsp");

}

}

メソッド getMemberInfo:

@Override
public Users getMemberInfo(String username) {
   String query = "SELECT M from Users M where M.username=:username";
   Query q = em.createQuery(query);
   q.setParameter("username", username);
   List results = q.getResultList();

   for (Object o:results) {
       Users m = (Users) o;
       return m;
   }

   return null;

}

問題は、メールが届かないことです。何が問題なのかわかりません。ユーザーはユーザー名を書き、データベースから電子メールを取得し、データベースから取得したユーザーの電子メールにパスワードを送信する必要があります。

4

3 に答える 3

0

実際、コードは良いですが、問題は私が書かなければならないことでした:

String to = p.getEmail(); 

それ以外の :

String to = (String)session1.getAttribute(p.getEmail());

とにかく助けてくれてありがとう

于 2013-01-17T11:52:08.110 に答える
0

これは、メールが届かないという問題に対する適切な回答ではありません。しかし、最初の問題は、メールの送信を妨げている問題が正確に何であるかがわからないことです...

TransportListener を Transport インスタンスに追加して、何が起こるかを確認する必要があります。

transport.addTransportListener(new TransportListener {
    public void messageDelivered(TransportEvent e) {
      //Invoked when a Message is succesfully delivered. 
    }
    public void messageNotDelivered(TransportEvent e)  {
      //Invoked when a Message is not delivered. 
      System.out.println("Message not delivered: " + e.getMessage())
      //should be a proper log message anyway...
    } 
    public void messagePartiallyDelivered(TransportEvent e)  {
      //Invoked when a Message is partially delivered. 
    }
}) ;

推奨リンク:

于 2013-01-17T10:56:51.273 に答える
-1

追加のプロパティを構成する必要があると思います

        props.put("mail.smtp.socketFactory.port", "465");
        props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");
于 2013-01-17T11:00:04.337 に答える