如何从 JSP/servlet 发送电子邮件?是否需要下载一些 jar,或者您可以在没有任何 jar 的情况下从 JSP/servlet 发送电子邮件吗?
我的 Java 代码会是什么样子?
我的 HTML 代码会是什么样子(如果有的话)?
是否需要多个类,还是可以只使用一个类?
最佳答案
邮件程序逻辑应该放在它自己的独立类中,您可以在任何地方重复使用。 JSP 文件应该只包含表示逻辑和标记。 Servlet 类应该以适当的方式处理请求并调用邮件程序类。以下是您需要执行的步骤:
首先决定哪个SMTP server你想使用这样你就可以发送电子邮件。您的 ISP 之一? Gmail之一?雅虎?网站托管服务提供商?自己维护的?不管怎样,计算这个 SMTP 服务器的主机名、端口、用户名和密码。您将需要此信息。
创建一个使用 JavaMail API 的普通 Java 类发送邮件消息。 JavaMail API 带有出色的 tutorial和 FAQ .将类命名为
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); } }
您可以根据需要使它变得简单或高级。没关系,只要你有一个类可以发送这样的邮件。
现在是 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>
是的,非常简单,只需按照您想要的方式标记/设置样式即可。
现在,创建一个 Servlet 类,它监听
/contact
的url-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/