java - 如何从 jsp/servlet 发送电子邮件?

标签 java jsp servlets

如何从 JSP/servlet 发送电子邮件?是否需要下载一些 jar,或者您可以在没有任何 jar 的情况下从 JSP/servlet 发送电子邮件吗?

  • 我的 Java 代码会是什么样子?

  • 我的 HTML 代码会是什么样子(如果有的话)?

  • 是否需要多个类,还是可以只使用一个类?

最佳答案

邮件程序逻辑应该放在它自己的独立类中,您可以在任何地方重复使用。 JSP 文件应该只包含表示逻辑和标记。 Servlet 类应该以适当的方式处理请求并调用邮件程序类。以下是您需要执行的步骤:

  1. 首先决定哪个SMTP server你想使用这样你就可以发送电子邮件。您的 ISP 之一? Gmail之一?雅虎?网站托管服务提供商?自己维护的?不管怎样,计算这个 SMTP 服务器的主机名、端口、用户名和密码。您将需要此信息。


  2. 创建一个使用 JavaMail API 的普通 Java 类发送邮件消息。 JavaMail API 带有出色的 tutorialFAQ .将类命名为 Mailer 并给它一个 send() 方法(或任何你想要的)。使用一些带有 main() 方法的测试器类来测试它,如下所示:

    public class TestMail {
        public static void main(String... args) throws Exception {
            // Create mailer.
            String hostname = "smtp.example.com";
            int port = 2525;
            String username = "nobody";
            String password = "idonttellyou";
            Mailer mailer = new Mailer(hostname, port, username, password);
    
            // Send mail.
            String from = "john.doe@example.com";
            String to = "jane.doe@example.com";
            String subject = "Interesting news";
            String message = "I've got JavaMail to work!";
            mailer.send(from, to, subject, message);
        }
    }
    

    您可以根据需要使它变得简单或高级。没关系,只要你有一个类可以发送这样的邮件。


  3. 现在是 JSP 部分,您提到 JSP 的原因并不完全清楚,但由于 JSP 是 supposed为了仅表示 HTML,我敢打赌您希望在 JSP 中拥有类似联系表单的内容。这是一个启动示例:

    <form action="contact" method="post">
        <p>Your email address: <input name="email"></p>
        <p>Mail subject: <input name="subject"></p>
        <p>Mail message: <textarea name="message"></textarea></p>
        <p><input type="submit"><span class="message">${message}</span></p>
    </form>
    

    是的,非常简单,只需按照您想要的方式标记/设置样式即可。


  4. 现在,创建一个 Servlet 类,它监听 /contacturl-pattern(与提交表单相同)并实现 doPost()方法(与表单使用的方法相同)如下:

    public class ContactServlet extends HttpServlet {
        private Mailer mailer;
        private String to;
    
        public void init() {
            // Create mailer. You could eventually obtain the settings as
            // web.xml init parameters or from some properties file.
            String hostname = "smtp.example.com";
            int port = 2525;
            String username = "nobody";
            String password = "forgetit";
            this.mailer = new Mailer(hostname, port, username, password);
            this.to = "you@example.com";
        }
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            String email = request.getParameter("email");
            String subject = request.getParameter("subject");
            String message = request.getParameter("message");
            // Do some validations and then send mail:
    
            try {
                mailer.send(email, to, subject, message);
                request.setAttribute("message", "Mail succesfully sent!");
                request.getRequestDispatcher("/WEB-INF/contact.jsp").forward(request, response);
            } catch (MailException e) {
                throw new ServletException("Mailer failed", e);
            }
        }
    }
    

    就是这样。保持简单和干净。每件事都有自己明确的职责。

关于java - 如何从 jsp/servlet 发送电子邮件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3757442/

相关文章:

java - 简单的正则表达式匹配

java - 基于JTextField过滤JList

javascript - Angularjs data-ng-click 不会第二次工作......怎么办?

jsp - 使用 JSP 的 Request.getParameter

java - 在 JSP 中获取通过 jQuery ajax POST 传递的多值参数

java - 未应用 Spring 模型

java - 从 Java 在 MySQL 中创建临时表

java - Jsoup : how to extract img with space in filename?

jsp - 如何安装 JSTL?绝对uri : http://java. sun.com/jSTL/core 无法解析

java - 静态成员是否在 Java EE 兼容的 servlet 容器中跨应用程序共享?