2012-03-19 3 views
-1

Мне нужна кодировка для электронной почты с приложением с использованием сервлета. Пожалуйста, помогите мне. Я новичок в Servlets & JSP. Мне нужно кодирование JSP и сервлета.Как отправить электронное письмо с помощью сервлета?

Вот что я пытался до сих пор -

<%@page contentType="text/html" pageEncoding="UTF-8"%>   
<html> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>Sending email</title> 
    <link rel="stylesheet" href="style.css" type="text/css"> 
</head> 
<body> 
    <center>   
     <form action="EmailServlet" method="post" name="ss"> 
      <table> 
       <tr> 
        <td>To</td> 
        <td><input type="text" name="to"></td> 
       </tr> 
       <tr> 
        <td>cc</td> 
        <td><input type="text" name="cc"></td> 
       </tr> 
       <tr> 
        <td>bcc</td> 
        <td><input type="text" name="bcc"></td> 
       </tr> 
       <tr> 
        <td>From</td> 
        <td><input type="text" name="from"></td> 
       </tr> 
       <tr> 
        <td>Subject</td> 
        <td><input type="text" name="subject"></td> 
       </tr> 
       <tr> 
        <td>attach</td> 
        <td><input type="file" name="file1"></td> 
       </tr> 
       <tr> 
        <td>attach2</td> 
        <td><input type="file" name="file2"></td> 
       </tr>   
       <tr> 
        <td>Message</td> 
        <td><textarea cols="25" rows="8" name="message"></textarea></td> 
       </tr> 
       <tr> 
        <td>password</td> 
        <td><input type="password" name="password"></td> 
       </tr> 
      </table> 
      <br> 
      <input type="submit" value="submit" onclick=" return soora();"> 
     </form> 
    </center> 
</body> 
</html> 

МОЯ страница сервлетов:

import java.io.*; 
import java.net.*; 

import java.util.Properties; 
import javax.mail.AuthenticationFailedException; 
import javax.mail.Authenticator; 
import javax.mail.PasswordAuthentication; 
import javax.mail.Message; 
import javax.mail.MessagingException; 
import javax.mail.Session; 
import javax.mail.Transport; 
import javax.mail.internet.AddressException; 
import javax.mail.internet.InternetAddress; 
import javax.mail.internet.MimeMessage; 
import javax.servlet.*; 
import javax.servlet.http.*; 

public class EmailServlet extends HttpServlet { 

    protected void processRequest(HttpServletRequest request, 
            HttpServletResponse response) 
        throws IOException, ServletException { 

     final String err = "/error.jsp"; 
     final String succ = "/success.jsp"; 

     String from = request.getParameter("from"); 
     String to = request.getParameter("to"); 
     String subject = request.getParameter("subject"); 
     String message = request.getParameter("message"); 
     String login = request.getParameter("login"); 
     String password = request.getParameter("password"); 

     try { 
      Properties props = new Properties(); 
      props.setProperty("mail.host", "smtp.gmail.com"); 
      props.setProperty("mail.smtp.port", "587"); 
      props.setProperty("mail.smtp.auth", "true"); 
      props.setProperty("mail.smtp.starttls.enable", "true"); 

      Authenticator auth = new SMTPAuthenticator(login, password); 

      Session session = Session.getInstance(props, auth); 

      MimeMessage msg = new MimeMessage(session); 
      msg.setText(message); 
      msg.setSubject(subject); 
      msg.setFrom(new InternetAddress(from)); 
      msg.addRecipient(Message.RecipientType.TO, new InternetAddress(to)); 
      Transport.send(msg); 

     } catch (AuthenticationFailedException ex) { 
      request.setAttribute("ErrorMessage", "Authentication failed"); 

      RequestDispatcher dispatcher = request.getRequestDispatcher(err); 
      dispatcher.forward(request, response); 

     } catch (AddressException ex) { 
      request.setAttribute("ErrorMessage", "Wrong email address"); 

      RequestDispatcher dispatcher = request.getRequestDispatcher(err); 
      dispatcher.forward(request, response); 

     } catch (MessagingException ex) { 
      request.setAttribute("ErrorMessage", ex.getMessage()); 

      RequestDispatcher dispatcher = request.getRequestDispatcher(err); 
      dispatcher.forward(request, response); 
     } 
      RequestDispatcher dispatcher = request.getRequestDispatcher(succ); 
      dispatcher.forward(request, response); 

    } 

    private class SMTPAuthenticator extends Authenticator { 

     private PasswordAuthentication authentication; 

     public SMTPAuthenticator(String login, String password) { 
      authentication = new PasswordAuthentication(login, password); 
     } 

     protected PasswordAuthentication getPasswordAuthentication() { 
      return authentication; 
     } 
    } 

    protected void doGet(HttpServletRequest request, 
         HttpServletResponse response) 
        throws ServletException, IOException { 
     processRequest(request, response); 
    } 

    protected void doPost(HttpServletRequest request, 
          HttpServletResponse response) 
        throws ServletException, IOException { 
     processRequest(request, response); 
    } 
} 

я получил ошибку ниже, как это:

java.lang.IllegalStateException: Cannot forward after response has been committed 
EmailServlet.processRequest(EmailServlet.java:71) 
EmailServlet.doPost(EmailServlet.java:97) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:710) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 
+0

сэр, пожалуйста, помогите мне узнать. Я написал, что я попробовал –

ответ

0

Вы можете использовать Java Mail для этого, это бесплатная загрузка. Это почти то же самое в сервлете или JSP, как и было бы, за исключением того, что вы можете использовать context.xml и JNDI, чтобы получить соединение с необходимостью жесткого кода всего этого. Но я не уверен, что вы готовы к этому, если вы не знаете сервлетов или JSP.

0

Вы послав вперед на err страницы в catch блоках, которые будут совершивших ответ, но вы не возвращаетесь оттуда, так что код продолжает на дно, где вы представляемые другие вперед к succ стр. Фактически вы отправляете два форварда в случае исключения, а второй вперед не может иметь место и вызывает конкретное исключение, с которым вы сталкиваетесь.

Вам необходимо добавить return; в конец catch блоков, чтобы метод возвращался и не выполнял оставшийся код. См. Также java.lang.IllegalStateException: Cannot (forward | sendRedirect | create session) after response has been committed

Что касается работы с JavaMail, было бы более полезно, если бы вы напечатали трассировку стека реального исключения, которое вы получаете, чтобы вы точно знали, что не удалось. Прямо сейчас вы устанавливаете сообщение как атрибут запроса (который, по-видимому, должен отображаться на пересылаемой странице ошибок), и вы концентрируетесь на «неправильном» исключении. Обратите внимание, что отправка почты не отличается в классе сервлета, чем в обычном Java-классе. Я бы предложил отложить код сервлета и заставить его работать в обычном Java-классе.

Смежные вопросы