发送邮件的实现(javaweb)

推荐Maven项目必备的网站

下载jar包

如何获取QQ邮箱的授权码

1.
在这里插入图片描述
2.
在这里插入图片描述
3.
在这里插入图片描述

代码(干货)

entity

package com.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
//这里使用注解
@AllArgsConstructor //有参构造方法
@NoArgsConstructor //无参构造方法
@Data  // get/set方法

public class User {
    private String username;
    private String password;
    private String email;

    /*public User() {
    }

    public User(String username, String password, String email) {
        this.username = username;
        this.password = password;
        this.email = email;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    @Override
    public String toString() {
        return "User{" +
                "username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", email='" + email + '\'' +
                '}';
    }*/
}

utils

package com.utils;

import com.entity.User;
import com.sun.mail.util.MailSSLSocketFactory;

import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.security.GeneralSecurityException;
import java.util.Properties;

//多线程实现邮件的发送
public class SendMail extends Thread{
    //用于给用户发送邮件的邮箱
    private String from = "邮箱";
    //邮箱的用户名
    private String username = "邮箱";
    //邮箱的密码:授权码
    private String password = "授权码";
    //发送邮件的服务器地址
    private String host = "smtp.qq.com";

    private User user;
    public SendMail(User user){
        this.user = user;
    }

    //重写run方法的实现,在run方法中发送邮件给指定的用户
    @Override
    public void run() {
        Properties prop = new Properties();
        prop.setProperty("mail.host",host);
        prop.setProperty("mail.transport.protocol","smtp");
        prop.setProperty("mail.smtp.auth","true");

        //SSL加密(QQ邮箱特有)
        try {
            MailSSLSocketFactory sslFactory = new MailSSLSocketFactory();
            sslFactory.setTrustAllHosts(true);
            prop.put("mail.smtp.ssl.enable","true");
            prop.put("mail.smtp.ssl.socketFactory",sslFactory);
            //发送邮件的5个步骤

            //1. session对象
            Session session = Session.getDefaultInstance(prop, new Authenticator() {
                @Override
                public PasswordAuthentication getPasswordAuthentication() {
                    return new PasswordAuthentication(username,password);
                }
            });
            //开启debug模式,可以查看其状态
            session.setDebug(true);
            //2. 通过session得到transport对象
            Transport transport = session.getTransport();
            //3. 使用邮箱的用户名和授权码连上服务器
            transport.connect(host,username,password);
            //4. 创建邮件
            MimeMessage message = new MimeMessage(session);
            //发件人
            message.setFrom(new InternetAddress(from));
            message.setSubject("网站注册的邮件信息"); //标题
            //收件人
            message.setRecipient(Message.RecipientType.TO,new InternetAddress(user.getEmail()));
            //保存修改
            String info = "恭喜您注册成功,您的用户名:"+user.getUsername()+",密码:"+user.getPassword()+",请妥善保管,如有问题请咨询客服";
            message.setContent(info,"text/html;charset=utf-8");
            message.saveChanges();

            //5.发送
            transport.sendMessage(message,message.getAllRecipients());
            transport.close();
        } catch (GeneralSecurityException e) {
            e.printStackTrace();
        } catch (NoSuchProviderException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        }

    }
}

servlet

package com.servlet;

import com.entity.User;
import com.utils.SendMail;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class RegisterServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
            //接收用户请求,封装成对象
            String username = req.getParameter("username");
            String password = req.getParameter("password");
            String email = req.getParameter("email");
            User user = new User(username, password, email);
            //用户注册成功之后,就会给用户发一封邮件
            //使用多线程专门发送邮件,防止耗时,和网站注册人数过多
            SendMail sendMail = new SendMail(user);
            //启动线程
            sendMail.start();

            //注册用户
            req.setAttribute("message","注册成功,请注意接收邮件!");
            req.getRequestDispatcher("info.jsp").forward(req,resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>注册页面</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/RegisterServlet.do" method="post">
  <p>用户名:<input type="text" name="username"></p>
  <p>密码:<input type="password" name="password"></p>
  <p>邮箱:<input type="text" name="email"></p>
  <input type="submit" value="注册"> | <input type="reset" value="重置">
</form>
</body>
</html>
<html>
<head>
    <title>页面</title>
</head>
<body>
<h2>温馨提醒:</h2>
${message}
</body>
</html>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值