JavaMail发送google email
2014-05-12 21:44
567 查看
在搭建网站的历程当中,势必会有发送邮件的需求。例如
注册的时候,使用邮箱,将验证码发到用户邮箱中。
使用邮箱找回密码。
使用邮箱订阅网站更新。当网站有新内容发布,将发送邮件通知用户。
关于邮件系统的搭建,我将用3篇博客记录邮件系统的不断演化。今天是最简单最基本的邮件发送篇。在本篇博客中,我将使用同步的方式,调用JavaMail的接口来发送email。
GlassFish4 或者 Tomcat8 或者任何Web容器
一个邮件服务器
JavaMail
JavaMail提供了Java的借口,帮助java程序员发送email。JavaMail帮助解析邮件协议SMTP,POP3...,跟邮件服务器打交道。JavaMail可以单独的应用于J2SE的程序中,但需要到JavaMail的网站下载所有Jar包。http://www.oracle.com/technetwork/java/javamail/index.html 当然,其最常应用于Web容器,EJB容器。由于J2EE的Server中已经包含JavaMail的包了,所以不需要添加任何依赖。
想想Email Client,JavaMail起到的便是同样的作用。真正发送email的还是邮件服务器。所以,若想成功的调用JavaMail,还需要安装邮件服务器。当然,我们可以使用现成的邮件服务器GMail。
JavaMail同样,也应该使用容器的resource,而不是自己创建session实例。所有的服务器标准均类似。接下来,使用GlassFish4来掩饰JavaMail rource的创建。
在GlassFish4的管理界面http://localhost:4848/ 打开 Resources->JavaMail Sessions. 点击new按钮,创建新的session。也可以直接编辑C:\glassfish4\glassfish\domains\domain1\config\domain.xml文件。两者作用相同。
在resources节点下面,添加
请替换成你自己的账号和密码,保存,然后重启GlassFish.
页面中有一个Form,填写一个email地址,便可向其发送通知。
下面实现NotifyServlet.
NotifyServlet发送了一个最简单的email。
最后编辑web.xml,然后部署。
测试一下吧,向自己的某个email地址发消息,看有没有收到。
下一篇,使用JMS消息队列优化邮件发送系统
注册的时候,使用邮箱,将验证码发到用户邮箱中。
使用邮箱找回密码。
使用邮箱订阅网站更新。当网站有新内容发布,将发送邮件通知用户。
关于邮件系统的搭建,我将用3篇博客记录邮件系统的不断演化。今天是最简单最基本的邮件发送篇。在本篇博客中,我将使用同步的方式,调用JavaMail的接口来发送email。
必备软件
JDK 7GlassFish4 或者 Tomcat8 或者任何Web容器
一个邮件服务器
JavaMail
JavaMail提供了Java的借口,帮助java程序员发送email。JavaMail帮助解析邮件协议SMTP,POP3...,跟邮件服务器打交道。JavaMail可以单独的应用于J2SE的程序中,但需要到JavaMail的网站下载所有Jar包。http://www.oracle.com/technetwork/java/javamail/index.html 当然,其最常应用于Web容器,EJB容器。由于J2EE的Server中已经包含JavaMail的包了,所以不需要添加任何依赖。想想Email Client,JavaMail起到的便是同样的作用。真正发送email的还是邮件服务器。所以,若想成功的调用JavaMail,还需要安装邮件服务器。当然,我们可以使用现成的邮件服务器GMail。
JNDI
每一个Web服务器,均提供了Resource管理机制。将Resource以JNDI服务发布出去。容器提供的方案,成熟健壮方便,所以,尽可能的使用服务器的resource。例如JDBC连接,我们应该使用容器提供的datasource,而不是自己创建JDBC连接。因为容器的datasource不但提供了连接池的管理,还提供分布式事务管理。JavaMail同样,也应该使用容器的resource,而不是自己创建session实例。所有的服务器标准均类似。接下来,使用GlassFish4来掩饰JavaMail rource的创建。
在GlassFish4的管理界面http://localhost:4848/ 打开 Resources->JavaMail Sessions. 点击new按钮,创建新的session。也可以直接编辑C:\glassfish4\glassfish\domains\domain1\config\domain.xml文件。两者作用相同。
在resources节点下面,添加
<mail-resource host="smtp.gmail.com" transport-protocol-class="com.sun.mail.smtp.SMTPSSLTransport" store-protocol="imaps" store-protocol-class="com.sun.mail.imap.IMAPSSLStore" jndi-name="mail/mySession" transport-protocol="smtps" from="joey.zhangpeng@gmail.com" user="joey.zhangpeng@gmail.com"> <property name="mail-smtps-host" value="smtp.gmail.com"></property> <property name="mail-smtps-password" value="mypassword"></property> <property name="mail-smtps-socketFactory-class" value="javax.net.ssl.SSLSocketFactory"></property> <property name="mail-smtps-auth" value="true"></property> <property name="mail-smtps-socketFactory-port" value="465"></property> <property name="mail-smtps-port" value="465"></property> <property name="mail-smtps-starttls-enable" value="true"></property> <property name="mail.smtps.connectiontimeout" value="60000"></property> <property name="mail.smtps.timeout" value="180000"></property> <property name="mail-smtps-user" value="joey.zhangpeng@gmail.com"></property> <property name="mail-smtps-socketFactory-fallback" value="false"></property> <property name="mail.imaps.host" value="imap.gmail.com"></property> <property name="mail.imaps.port" value="993"></property> <property name="mail-imaps-password" value="mypassword"></property> <property name="mail.imaps.starttls.enable" value="true"></property> <property name="mail.imaps.user" value="joey.zhangpeng@gmail.com"></property> <property name="mail.imaps.socketFactory.fallback" value="false"></property> <property name="mail.imaps.socketFactory.class" value="javax.net.ssl.SSLSocketFactory"></property> <property name="mail.imaps.connectiontimeout" value="60000"></property> <property name="mail.imaps.timeout" value="180000"></property> </mail-resource>
请替换成你自己的账号和密码,保存,然后重启GlassFish.
创建web应用
新建一个Web项目,创建index.html<html> <head> <title>TODO supply a title</title> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> </head> <body> <form method="post" action="/sample/NotifyServlet"> Email:<input name="email" value=""/> <input type="submit" value="Buy" name="submit"/> </form> </body> </html>
页面中有一个Form,填写一个email地址,便可向其发送通知。
下面实现NotifyServlet.
import java.io.IOException; import java.io.PrintWriter; import static java.lang.ProcessBuilder.Redirect.from; import static java.lang.ProcessBuilder.Redirect.to; import java.util.logging.Level; import java.util.logging.Logger; import javax.mail.Address; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeMessage; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * * @author none2 */ public class NotifyServlet extends HttpServlet { private Session mySession; public NotifyServlet() throws NamingException { Context initCtx = new InitialContext(); mySession = (Session) initCtx.lookup("mail/mySession"); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String email = request.getParameter("email"); try { send(email); } catch (MessagingException ex) { Logger.getLogger(NotifyServlet.class.getName()).log(Level.SEVERE, null, ex); } response.setContentType("text/html;charset=UTF-8"); try (PrintWriter out = response.getWriter()) { out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet OrderServlet</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>You have notified "+email+"</h1>"); out.println("</body>"); out.println("</html>"); } } private void send(String email) throws MessagingException { Message message = new MimeMessage(mySession); message.setFrom(new InternetAddress("joey.zhangpeng@gmail.com")); Address toAddress = new InternetAddress(email); message.addRecipient(Message.RecipientType.TO, toAddress); message.setSubject("Hello"); message.setText("A notification."); Transport.send(message); } }
NotifyServlet发送了一个最简单的email。
最后编辑web.xml,然后部署。
测试一下吧,向自己的某个email地址发消息,看有没有收到。
下一篇,使用JMS消息队列优化邮件发送系统
相关文章推荐
- JAVAMAIL使用Google邮件服务器发送邮件
- 使用javaMail1.4发送email心得
- android 发送邮件(android自带email和javamail)均可发送带有多个附件
- Android中 使用Javamail发送Email带群发加附件(绝对可用!)
- JavaMail 发送Email(含附件)
- Android中 使用Javamail发送Email带群发加附件(绝对可用!)
- 用JSP发送EMAIL(JavaMail简易实现版)
- JavaMail、Commons Email发送邮件 出现结果后到的文件是Base64的问题的解决办法
- JavaMail在Android和Java中的用法发送Email验证码
- 【Android】发送Email(内置Gmail和JavaMail)
- JAVAMAIL试用google邮箱发送邮件
- javamail发送email
- java - HtmlEmail发送html邮件
- JavaMail发送和接收邮件
- EMAIL发送系统(C#+基于SMTP认证)
- (转)用javamail发送带附件的邮件
- 帝国CMS留言板回复后发送EMAIL通知客户
- 在JSP中能发送EMAIL.
- C#发送Email邮件方法总结
- JavaMail 发送验证邮件(JSP/Servlet实例源码)