Как преобразовать содержимое сообщения электронной почты в формате HTML в JSP, приложение сервлет? - PullRequest
0 голосов
/ 10 ноября 2019

Я работаю в проекте, который требует отправки электронной почты. Письма уже отправляются, но мне нужно внедрить более профессиональный формат, и, исходя из того, что я исследовал, я могу внедрить формат HTML в электронную почту. Это необходимо, потому что я должен поместить информацию, связанную с проектной компанией (имидж корпоративный). Я пытался использовать msg.SendContent, но он не работал для меня. Я надеюсь, что вы можете помочь мне.

Я использую NetBeans с библиотекой javax.mail:

public class EmailServicio {

    public static void enviarEmail(String host, String port,
            final String user, final String pass, String destinatario,
            String asunto, String mensaje) throws AddressException,
            MessagingException {

        // sets SMTP server properties
        Properties properties = new Properties();
        properties.put("mail.smtp.host", host);
        properties.put("mail.smtp.port", port);
        properties.put("mail.smtp.auth", "true");
        properties.put("mail.smtp.starttls.enable", "true");

        // creates a new session with an authenticator
        Authenticator auth = new Authenticator() {
            public PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(user, pass);
            }
        };

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

        // creates a new e-mail message
        Message msg = new MimeMessage(session);

        msg.setFrom(new InternetAddress(user));
        InternetAddress[] toAddresses = {new InternetAddress(destinatario)};
        msg.setRecipients(Message.RecipientType.TO, toAddresses);
        msg.setSubject(asunto);
        msg.setContent("<h1>Maipo Grande, lider en exportación</h1>", "text/html");
        msg.setSentDate(new Date());
        msg.setText(mensaje);

        // sends the e-mail
        Transport.send(msg);
    }
}

Код сервлета:

public class ServletContacto extends HttpServlet {

    private String host;
    private String port;
    private String user;
    private String pass;

    public void init() {
        // reads SMTP server setting from web.xml file
        ServletContext context = getServletContext();
        host = context.getInitParameter("host");
        port = context.getInitParameter("port");
        user = context.getInitParameter("user");
        pass = context.getInitParameter("pass");
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        UsuarioServicio usua = new UsuarioServicio();
        String url = request.getRequestURI();

        if ("/maipoGrande/Contacto".equals(url)) {
            request.setAttribute("titulo", "Formulario Contacto");
            HttpSession session = request.getSession(true);
            if (session.getAttribute("usuario") == null) {
                response.sendRedirect(request.getContextPath() + "/Login");
            } else {
                getServletContext().getRequestDispatcher("/contacto.jsp").forward(request, response);
            }
        }
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        String url = request.getRequestURI();
        if ("/maipoGrande/Contacto".equals(url)) {
            String destinatario = "atencion.maipogrande@gmail.com";
            String asunto = request.getParameter("txtAsunto");
            String mensaje = request.getParameter("txtMensaje");
            String mensajeRespuesta = "";
            try {
                EmailServicio.enviarEmail(host, port, user, pass, destinatario, asunto,
                        mensaje);
                mensajeRespuesta = "Su correo fue enviado exitosamente";
            } catch (Exception ex) {
                ex.printStackTrace();
                mensajeRespuesta = "Se ha encontrado un error: " + ex.getMessage();
            } finally {
                request.setAttribute("Mensaje", mensajeRespuesta);
                getServletContext().getRequestDispatcher("/resultado.jsp").forward(
                        request, response);
            }
        }
    }
}

Я надеюсь, что h1 (тест) отображается в отправленном сообщении.

1 Ответ

0 голосов
/ 10 ноября 2019

Хотя вы точно не указали, в чем заключается ваша проблема, возможно, вы звоните msg.setText(mensaje); после вызова msg.setContent("<h1>Maipo Grande, lider en exportación</h1>", "text/html");.

При вызове msg.setContent() тип MIME будет установлен на "text / html" , что вам и нужно. Но последующий вызов msg.setText() сбросит тип MIME на "text / plain" , а это не то, что вам нужно при отправке электронного письма в формате HTML.

Решение заключается в простомуберите звонок на msg.setText(). Затем вы будете отправлять письмо по электронной почте в формате HTML. Конечно, вам также нужно будет изменить содержимое сообщения, переданного на msg.setContent() для электронной почты вашего приложения, но это всего лишь детали реализации.

См. Javadoc для интерфейса javax.mail.Part, который реализован классом javax.mail.Message, для получения дополнительной информации о setContent() и setText().

Еще один связанный с этим момент заключается в том, что ваш метод EmailServicio.enviarEmail() выглядит почти как прямая копияmain() метод класса SendHTMLEmail в учебном пособии « JavaMail API - отправка электронного письма в формате HTML », кроме добавленного вами вызова к setText().

Стоит проверитьчто вы можете успешно запустить свою реализацию своего простого Java-приложения. Отладка приложения Java намного проще, чем сервлета, если есть какие-либо проблемы, которые необходимо решить. После того как у вас будет работать приложение электронной почты в формате HTML, вы сможете перенести свой рабочий код в веб-приложение.

...