我用的foxmail来接受的邮件的,你可以安装,也可以选择不安装
1.mail.jar包
2.你需要开启你的qq邮箱
https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
开启这个服务你才能发邮件,(你要记住你的授权码,用做你登录邮箱的密码,不能用qq密码,会报错)
1.创建一个web项目
2.项目结构图
3.编写filter类,解决中文乱码的问题
package com.tz.filter;
import java.io.IOException;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
public class MyFilter implements Filter
{
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
// 要增强的方法:request.getParameter
// 被代理的对象: request
final HttpServletRequest request=(HttpServletRequest)req;
// 动态的生成代理对象
HttpServletRequest hsr=(HttpServletRequest)Proxy.newProxyInstance(
request.getClass().getClassLoader(),
request.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// 1 判断是否是需要增强的方法 getParameter
if("getParameter".equals(method.getName()))
{
// 知道getParameter使用的是哪个提交方式
String m = request.getMethod();
// 判断是get还是post
if("get".equalsIgnoreCase(m))
{
// 以前方法调用后的乱码
String s =(String)method.invoke(request, args);
// 增强--解决乱码
s=new String(s.getBytes("iso8859-1"),"utf-8");
return s;
}
if("post".equalsIgnoreCase(m))
{
request.setCharacterEncoding("utf-8");
}
}
// 如果是别的方法
return method.invoke(request, args);
}
});
// 放行
chain.doFilter(hsr, response);
}
@Override
public void destroy() {
// TODO Auto-generated method stub
}
}
在web.xml中配置filter
myfilter
com.tz.filter.MyFilter
myfilter
/*
4.编写MailServlet类(主要类)
package com.tz.servlet;
import javax.mail.*;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Properties;
@WebServlet("/mail")
public class MailServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
try {
//接受前端传递过来的值
//收件人
String name = req.getParameter("name");
//主题
String title= req.getParameter("title");
//正文
String content=req.getParameter("content");
//账户:
//用户名
String username ="[email protected]";
//密码 授权码 lrkxqparssdfsdf 这种样子的
String password ="授权码"; //这个必须是必须是授权码 不然要抱错
//https://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256
// 创建会话对象
//1、获得邮箱服务的连接(会话对象)
Properties props = new Properties();//封装数据
props.put("mail.transport.protocol", "SMTP");//设置发邮件的协议
props.put("mail.host", "smtp.qq.com");//设置发邮件的地址(smtp邮箱服务器地址) 邮件发送的主机
props.put("mail.smtp.auth", "true");// 指定验证为true 密码安全验证
//创建一个邮箱
Session session = Session.getInstance(props);//会话对象
MimeMessage ms = new MimeMessage(session);//创建邮件对象
//设置邮箱的来源
Address toAddress;
toAddress = new InternetAddress(username);
ms.setFrom(toAddress); //设置发送者
//设置邮箱的接受者 就是前端传来的name
ms.setRecipients(Message.RecipientType.TO,name);
ms.setSubject(title);
ms.setText(content);
ms.saveChanges();//保存
//创建一个发送工具
Transport ts = session.getTransport("smtp");
ts.connect(username,password);
ts.sendMessage(ms,ms.getAllRecipients());//拿出所有的接受者
ts.close();
String msg = "发送成功";
req.setAttribute("msg",msg);
req.getRequestDispatcher("/message.jsp").forward(req,resp);
} catch (Exception e) {
e.printStackTrace();
String msg = "发送失败";
req.setAttribute("msg",msg);
req.getRequestDispatcher("/message.jsp").forward(req,resp);
}
}
}
5.编写index.jsp页面(你也可以做好看点,我为了方便就没有用css来修饰)
<%--
Created by IntelliJ IDEA.
User: 20473
Date: 2019/4/14
Time: 16:29
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
$Title$
一个message.jsp页面,用于发送过后页面显示信息,来表示发送失败还是成为
<%--
Created by IntelliJ IDEA.
User: 20473
Date: 2019/4/14
Time: 23:22
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
信息页面
${msg}
好了,一个简单的发送邮件的案例就制作完成了,不仅仅能发qq邮箱,也可以发送其他的邮箱的,
也可以实现群发邮件,邮件中间有英文状态的","号隔开