javaweb实现qq邮箱

一.效果图

我用的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

 <filter>
        <filter-name>myfilter</filter-name>
        <filter-class>com.tz.filter.MyFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>myfilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

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 ="204732791@qq.com";
            //密码 授权码 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" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
    <form action="${pageContext.request.contextPath}/mail" method="post">
       收件人:<input type="text" name ="name"><br><br><br>
       主题 :<input type="text" name = "title"><br><br><br><br>
       正文 :<textarea cols="20" rows="10" name="content"></textarea><br><br><br>
        <input type="submit" value="发送">
    </form>
  </body>
</html>

一个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" %>
<html>
<head>
    <title>信息页面</title>
</head>
<body>
<h2>${msg}</h2>
</body>
</html>

 

好了,一个简单的发送邮件的案例就制作完成了,不仅仅能发qq邮箱,也可以发送其他的邮箱的,

也可以实现群发邮件,邮件中间有英文状态的","号隔开

message.setRecipient(RecipientType.TO, new InternetAddress(email)); // 设置发送方式与接收者,这个可以单发,不能群发

ms.setRecipients(Message.RecipientType.TO,name);  //群发

 

 

 

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值