实现java mail发送邮件
来源:互联网 发布:白夜追凶小说结局知乎 编辑:程序博客网 时间:2024/04/27 02:38
实现java mail发送邮件
最近在网上找了一下相关资料,学习了一下java mail,这两天研究了一下,觉得实现java mail发送邮件还是挺简单的,没有想象中那么难,为了以后的方便,还有考虑到有这方面需要的朋友的参考,废话就不多说了,下面就来跟大家分享一下我的源代码,也欢迎大家提出程序中不足的地方,互相交流学习,共同进步。
开发环境:
我是用 myeclipse10.7 + tomcat7.0 + jdk1.7作为开发环境的,操作系统是win7,开发该发邮件的项目所需要的jar包有:activation.jar、mail.jar(这两个包是开发中必须要用到的,需要放在/lib目录下),这两个jar包的下载地址 http://download.csdn.net/detail/wangcunhuazi/8090791
项目的结构:
javamail:web项目名称
com.mail.servlet:存放发送邮件的业务处理类
SendMailServlet.java:发送邮件的业务处理类
com.util.mail:存放发送邮件的核心类
前三个java类:发送邮件的核心类,必不可少
Test.java:发送邮件的测试类
/lib:存放开发项目所需的jar包
activation.jar、mail.jar:发送邮件必须的第三方jar包
web.xml:存放项目中的配置信息,如servlet的映射信息
index.jsp:发送邮件的入口页面
sendMail:发送邮件页面
success.jsp:发送邮件成功后跳转到的页面
fail.jsp:发送邮件失败后跳转到的页面
项目的源代码:
朋友们可以按照上面的项目结构,自己新建一个web项目,然后把下面的每个文件的源代码复制粘贴到自己的项目的
相应文件里。也可以到这里http://download.csdn.net/detail/wangcunhuazi/8090827来下载整个项目,里面包含这里所
说的所有项目结构和源代码。
(注意:通过上面链接下载到的项目,在导入自己的myeclipse时,第一件事情,请把该项目的项目编码集改为UTF-8,否则,有可能出现乱码的情况,修改编码集的具体操作可以参考这里 http://blog.csdn.net/wangcunhuazi/article/details/40432341)
SendMailServlet.java
package com.mail.servlet;import com.util.mail.MailSenderInfo;import com.util.mail.SimpleMailSender;import java.io.IOException;import java.io.PrintWriter;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.util.mail.MailSenderInfo;import com.util.mail.SimpleMailSender;public class SendMailServlet extends HttpServlet {public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doPost(request, response);}public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {//设置字符编码request.setCharacterEncoding("utf-8");response.setContentType("text/html;charset=utf-8");//从页面获取参数String userName = request.getParameter("username");String serverHost = request.getParameter("serverhost");String password =request.getParameter("password");String toAddress =request.getParameter("toaddress");String subject =request.getParameter("subject");String content =request.getParameter("content");//发送方邮箱SMTP服务器地址String mailServerHost = "smtp." + serverHost;//发送方邮箱SMTP服务器的端口, qq.com、163.com、126.com、sina.com、sohu.com等的端口号都为25 String mailServerPort = "25";//如果前台页面中需要添加邮箱类型,如gmail.com,则这里可以添加以下语句处理//if(serverHost.equals("gmail.com"))//{// mailServerPort = "587";//}//发送方的邮箱账号userName = userName + "@" + serverHost; //测试获取到的用户名是否正确System.out.println(userName);//发送方的邮箱地址String fromAddress = userName;//测试获取到的用户名是否正确 System.out.println(fromAddress);//这个类主要是设置邮件 MailSenderInfo mailInfo = new MailSenderInfo(); //服务器与端口的对应关系: smtp.qq.com -> 25或587 smtp.163.com -> 25 mailInfo.setMailServerHost(mailServerHost); //发送方的SMTP服务器地址 mailInfo.setMailServerPort(mailServerPort); //发送方SMTP服务器端口 mailInfo.setValidate(true); //设置SMTP服务器需要身份验证 mailInfo.setUserName(userName); //发送方邮箱账号 mailInfo.setPassword(password); //发送方邮箱密码 mailInfo.setFromAddress(fromAddress); //发送方邮箱地址 mailInfo.setToAddress(toAddress); //接收方邮箱地址 mailInfo.setSubject(subject); //邮件标题 mailInfo.setContent(content); //邮件内容 //这个类主要来发送邮件 SimpleMailSender sms = new SimpleMailSender(); boolean flag = false; flag = sms.sendHtmlMail(mailInfo);//发送html格式 //如果邮件发送成功,则跳转到success.jsp页面;否则,跳转到fail.jsp页面 if(flag) { System.out.println("发送html格式mail 成功!"); response.sendRedirect("success.jsp"); } else { System.out.println("发送html格式mail 失败!"); response.sendRedirect("fail.jsp"); }}}
MailSenderInfo.java
package com.util.mail;/** * 发送邮件需要使用的基本信息 */ import java.util.Properties; public class MailSenderInfo { // 发送邮件的服务器的IP和端口 private String mailServerHost; private String mailServerPort = "25"; // 邮件发送者的地址 private String fromAddress; // 邮件接收者的地址 private String toAddress; // 登陆邮件发送服务器的用户名和密码 private String userName; private String password; // 是否需要身份验证 private boolean validate = false; // 邮件主题 private String subject; // 邮件的文本内容 private String content; // 邮件附件的文件名 private String[] attachFileNames; /** * 获得邮件会话属性 */ public Properties getProperties(){ Properties p = new Properties(); p.put("mail.smtp.host", this.mailServerHost); p.put("mail.smtp.port", this.mailServerPort); p.put("mail.smtp.auth", validate ? "true" : "false"); return p; } public String getMailServerHost() { return mailServerHost; } public void setMailServerHost(String mailServerHost) { this.mailServerHost = mailServerHost; }public String getMailServerPort() { return mailServerPort; }public void setMailServerPort(String mailServerPort) { this.mailServerPort = mailServerPort; }public boolean isValidate() { return validate; }public void setValidate(boolean validate) { this.validate = validate; }public String[] getAttachFileNames() { return attachFileNames; }public void setAttachFileNames(String[] fileNames) { this.attachFileNames = fileNames; }public String getFromAddress() { return fromAddress; } public void setFromAddress(String fromAddress) { this.fromAddress = fromAddress; }public String getPassword() { return password; }public void setPassword(String password) { this.password = password; }public String getToAddress() { return toAddress; } public void setToAddress(String toAddress) { this.toAddress = toAddress; } public String getUserName() { return userName; }public void setUserName(String userName) { this.userName = userName; }public String getSubject() { return subject; }public void setSubject(String subject) { this.subject = subject; }public String getContent() { return content; }public void setContent(String textContent) { this.content = textContent; } }
MyAuthenticator.java
package com.util.mail;import javax.mail.*; public class MyAuthenticator extends Authenticator{String userName=null;String password=null; public MyAuthenticator(){}public MyAuthenticator(String username, String password) { this.userName = username; this.password = password; } protected PasswordAuthentication getPasswordAuthentication(){return new PasswordAuthentication(userName, password);}}
SimpleMailSender.java
package com.util.mail;import java.util.Date; import java.util.Properties;import javax.mail.Address; import javax.mail.BodyPart; import javax.mail.Message; import javax.mail.MessagingException; import javax.mail.Multipart; import javax.mail.Session; import javax.mail.Transport; import javax.mail.internet.InternetAddress; import javax.mail.internet.MimeBodyPart; import javax.mail.internet.MimeMessage; import javax.mail.internet.MimeMultipart; /** * 简单邮件(不带附件的邮件)发送器 */ public class SimpleMailSender { /** * 以文本格式发送邮件 * @param mailInfo 待发送的邮件的信息 */ public boolean sendTextMail(MailSenderInfo mailInfo) { // 判断是否需要身份认证 MyAuthenticator authenticator = null; Properties pro = mailInfo.getProperties(); if (mailInfo.isValidate()) { // 如果需要身份认证,则创建一个密码验证器 authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); } // 根据邮件会话属性和密码验证器构造一个发送邮件的session Session sendMailSession = Session.getDefaultInstance(pro,authenticator); try { // 根据session创建一个邮件消息 Message mailMessage = new MimeMessage(sendMailSession); // 创建邮件发送者地址 Address from = new InternetAddress(mailInfo.getFromAddress()); // 设置邮件消息的发送者 mailMessage.setFrom(from); // 创建邮件的接收者地址,并设置到邮件消息中 Address to = new InternetAddress(mailInfo.getToAddress()); mailMessage.setRecipient(Message.RecipientType.TO,to); // 设置邮件消息的主题 mailMessage.setSubject(mailInfo.getSubject()); // 设置邮件消息发送的时间 mailMessage.setSentDate(new Date()); // 设置邮件消息的主要内容 String mailContent = mailInfo.getContent(); mailMessage.setText(mailContent); // 发送邮件 Transport.send(mailMessage); return true; } catch (MessagingException ex) { ex.printStackTrace(); } return false; } /** * 以HTML格式发送邮件 * @param mailInfo 待发送的邮件信息 */ public static boolean sendHtmlMail(MailSenderInfo mailInfo){ // 判断是否需要身份认证 MyAuthenticator authenticator = null; Properties pro = mailInfo.getProperties(); //如果需要身份认证,则创建一个密码验证器 if (mailInfo.isValidate()) { authenticator = new MyAuthenticator(mailInfo.getUserName(), mailInfo.getPassword()); } // 根据邮件会话属性和密码验证器构造一个发送邮件的session // Session.getInstance(pro,authenticator);每次发生时获取一个新的session对象 // Session.getDefaultInstance(pro,authenticator);先看之前有没有session对象,如果没有,就new一个;如果有,则直接使用之前那个 Session sendMailSession = Session.getInstance(pro,authenticator); try { // 根据session创建一个邮件消息 Message mailMessage = new MimeMessage(sendMailSession); // 创建邮件发送者地址 Address from = new InternetAddress(mailInfo.getFromAddress()); // 设置邮件消息的发送者 mailMessage.setFrom(from); // 创建邮件的接收者地址,并设置到邮件消息中 Address to = new InternetAddress(mailInfo.getToAddress()); // Message.RecipientType.TO属性表示接收者的类型为TO mailMessage.setRecipient(Message.RecipientType.TO,to); // 设置邮件消息的主题 mailMessage.setSubject(mailInfo.getSubject()); // 设置邮件消息发送的时间 mailMessage.setSentDate(new Date()); // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象 Multipart mainPart = new MimeMultipart(); // 创建一个包含HTML内容的MimeBodyPart BodyPart html = new MimeBodyPart(); // 设置HTML内容 html.setContent(mailInfo.getContent(), "text/html; charset=utf-8"); mainPart.addBodyPart(html); // 将MiniMultipart对象设置为邮件内容 mailMessage.setContent(mainPart); // 发送邮件 Transport.send(mailMessage); return true; } catch (MessagingException ex) { ex.printStackTrace(); } return false; } }
Test.java
package com.util.mail;public class Test {public static void main(String[] args){ //这个类主要是设置邮件 MailSenderInfo mailInfo = new MailSenderInfo(); //服务器与端口的对应关系: smtp.qq.com -> 587 smtp.163.com -> 25 mailInfo.setMailServerHost("smtp.163.com"); //发送方的邮件服务器地址 mailInfo.setMailServerPort("25"); //发送方SMTP服务器端口 mailInfo.setValidate(true); //设置SMTP服务器需要身份验证 mailInfo.setUserName("18316022546@163.com"); //发送方邮箱账号 mailInfo.setPassword("xxxxxxxxxxxx"); //发送方邮箱密码 mailInfo.setFromAddress("18316022546@163.com"); //发送方邮箱地址 mailInfo.setToAddress("dgh18316022546@sina.com"); //接收方邮箱地址 mailInfo.setSubject("java mail发送邮件的测试"); //邮件标题 mailInfo.setContent("这是我在测试用java mail来发邮件"); //邮件内容 //这个类主要来发送邮件 SimpleMailSender sms = new SimpleMailSender(); //boolean flag1 = false; //flag1 = sms.sendTextMail(mailInfo);//发送文体格式 //if(flag1) // System.out.println("发送文体格式mail 成功!"); boolean flag2 = false; flag2 = sms.sendHtmlMail(mailInfo);//发送html格式 if(flag2) System.out.println("发送html格式mail 成功!"); }}
<?xml version="1.0" encoding="UTF-8"?><web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name></display-name> <servlet> <description>This is the description of my J2EE component</description> <display-name>This is the display name of my J2EE component</display-name> <servlet-name>SendMailServlet</servlet-name> <servlet-class>com.mail.servlet.SendMailServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SendMailServlet</servlet-name> <url-pattern>/SendMailServlet</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list></web-app>
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>首页</title> </head> <body> <a href="sendMail.jsp">去发一封邮件</a> <br> </body></html>
sendMail.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>发送邮件</title> <style type="text/css"> .label{ float: left; width: 200px; text-align: right; } .b{color: red;} </style> </head> <body> <form action="SendMailServlet" method="post"> <p><label>请登录您的邮箱</label></p> <label class="label"><b class="b">*</b> 邮箱账号:</label> <input type="text" name="username" size="30" maxlength="25" /> <select name="serverhost"> <option value="qq.com">@qq.com</option> <option value="163.com">@163.com</option> <option value="sina.com">@sina.com</option> <option value="sohu.com">@sohu.com</option> <option value="126.com">@126.com</option> </select> <br /> <label class="label"><b class="b">*</b> 邮箱密码:</label> <input type="password" name="password" size="30" maxlength="25" /><br /> <label class="label"><b class="b">*</b> 收件人邮箱:</label> <input type="text" name="toaddress" size="30" maxlength="25" /><br /> <label class="label">邮件标题:</label> <input type="text" name="subject" size="100" maxlength="200" /><br /> <label class="label">邮件内容:</label> <textarea name="content" rows="15" cols="85"></textarea><br /> <label class="label"><input type="submit" value="发送" /></label> </form> </body></html>
success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>发送成功 </title> </head> <body> 恭喜,发送邮件成功 !点<a href="sendMail.jsp">这里</a>回去再发一封。 </body></html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>发送失败</title> </head> <body> 抱歉,发送邮件失败 !点<a href="sendMail.jsp"><b>这里</b></a>回去重新发一封。 </body></html>
项目运行后的发送邮件的主页面如下图(可以选择需要的邮箱类型来登录,并发邮件到不同类型的邮箱):
需要注意的地方
(2) 以QQ邮箱为例,开启邮箱的 POP3/SMTP服务的方法是: 登录自己的账号,进去邮箱主页面后,找到“设置” 按进去,然后找到“账户”按进去,然后就可以找到“POP3/SMTP服务”,点击“开启”按钮,经过相关信息的认证后,就可以开启了。 开启后就可以在自己的项目中登录自己的邮箱账号来发邮件了。
(3) 请使用上面“开发环境”中的链接提供的activation.jar、mail.jar,因为在开发过程中,我发现有些 activation.jar、mail.jar有问题,导致了项目的失败,最后下载了上面的activation.jar、mail.jar来使用,项目成功。
(4) 如果全部用以上源代码来运行,出现错误的话,极大的可能就是您的邮箱的 POP3/SMTP服务没有开启。
整个项目的源码,可以在http://download.csdn.net/detail/wangcunhuazi/8090827这里下载
如有不妥之处,请各位兄台不吝赐教!
1 0
- 实现java mail发送邮件
- Java mail 实现邮件的发送
- java mail 实现邮件发送功能
- java mail实现简单的邮件发送
- Java Mail 发送邮件
- JAVA MAIL发送邮件
- Java Mail 发送邮件
- Java mail发送邮件
- java mail 发送邮件
- Java Mail发送邮件
- java mail邮件发送
- java mail 发送邮件
- Java mail发送邮件
- java mail发送邮件
- Java mail 发送邮件
- java mail发送邮件
- java mail 发送邮件
- java mail 发送邮件
- 什么是格式化字符串攻击?
- Jetty实战之 嵌入式Jetty运行web app
- spring+quartz动态定时器
- 有关毕业设计--题目选定
- 【v2.x OGE教程 17】事务处理
- 实现java mail发送邮件
- java中Date与String的相互转化
- Eclipse快捷键 10个最有用的快捷键
- 【例 2.13】
- SAAAAAAAAAAAAAAAAAAAAAAA
- 使用JFreeChart报javax.xml.parsers.ParserConfigurationException
- 【v2.x OGE教程 18】 Entity相关
- UITableView_02
- 辽宁政协原副主席通奸被双开