javaweb階段實現網站註冊發送郵件基礎源碼

本文分兩部分:
1.源碼部分:

package com.qiu;

import com.sun.mail.util.MailSSLSocketFactory;


import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.security.GeneralSecurityException;
import java.util.Properties;

public class MailDemo01 {
    public static void main(String[] args) throws Exception {
        Properties prop = new Properties();
        prop.setProperty("mail.host","smtp.qq.com");//設置qq郵箱服務器
        prop.setProperty("mail.transport.protocol","smtp");//郵箱發送協議
        prop.setProperty("mail.smtp.auth","true");//驗證用戶名密碼

        //關於QQ郵箱,還要設置SSL加密,加上一下代碼即可
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        prop.put("mail.smtp.ssl.enable","true");
        prop.put("mail.smtp.ssl.socketFactory",sf);

        //使用javamail的五個步驟
        //1.創建定義整個應用程序所需的環境信息的session對象
         //創建定義整個應用程序所需的環境信息的Session對象
        Session session=Session.getDefaultInstance(prop, new Authenticator() {
            @Override
            //qq纔有,其他郵箱就不用
            protected PasswordAuthentication getPasswordAuthentication() {
                //發送人郵件用戶名,授權碼
                return new PasswordAuthentication("[email protected]","zvebnyyhhqsybjjj");
            }
        });
        //開啓session的debug模式,這樣就可以查看到程序發送Email的運行狀態
        session.setDebug(true);
        //2.通過session得到transport對象session.getTransport();
        Transport ts = session.getTransport();
        //3.使用郵箱的用戶名和授權碼連上郵件服務器
        ts.connect("[email protected]","zvebnyyhhqsybjjj");
        //4.創建郵箱:寫郵件
        //注意需要傳遞Session
        MimeMessage message = new MimeMessage(session);
        //指明郵件的發件人
        message.setFrom(new InternetAddress("[email protected]"));
        //指明郵件的收件人,現在發件人和收件人是一樣的,那就是自己給自己發
        message.setRecipient(Message.RecipientType.TO,new InternetAddress("[email protected]"));
        message.setSubject("歡迎來到小邱的世界!");//郵件主題
        /*簡單的郵件發送方式
        message.setContent("你好呀","text/html;charset=UTF-8"); //郵件文本
         */
        /*
        複雜的郵件發送方式
        */
        MimeBodyPart image = new MimeBodyPart();
        //圖片需要經過數據處理,DataHandler:數據處理
        DataHandler dh = new DataHandler(new FileDataSource("E:\\ideaProjects\\bz.jpg"));
        image.setDataHandler(dh);//在我們的Body主體中放入這個處理的圖片數據
        image.setContentID("bz.jpg");//給圖片設置一個ID我們在後面可以使用
        //準備正文數據
        MimeBodyPart text = new MimeBodyPart();
        text.setContent("這是一封帶郵件正文的圖片<img src='cid:bz.jpg'>的郵件","text/html;charset=UTF-8");
        //描述數據關係
        MimeMultipart mm = new MimeMultipart();
        mm.addBodyPart(text);
        mm.addBodyPart(image);
        mm.setSubType("related");

        //設置到消息中,保存修改
        message.setContent(mm);//把最後編輯好的圖片放在消息之中
        message.saveChanges();//保存修改
        //5.發送郵件
        ts.sendMessage(message,message.getAllRecipients());
        //6.關閉鏈接
        ts.close();
    }
}

2.項目實戰部分(含源碼):在這裏插入圖片描述
源碼部分:
pojo_User:

package com.qiu.pojo;

import java.io.Serializable;

public class User implements Serializable {
    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 + '\'' +
                '}';
    }
}

servlet_RegisterServlet:

package com.qiu.servlet;

import com.qiu.pojo.User;
import com.qiu.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 send = new Sendmail(user);
        send.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);
    }
}

utils_Sendmail:

package com.qiu.utils;

import com.qiu.pojo.User;
import com.sun.mail.util.MailSSLSocketFactory;
import lombok.SneakyThrows;


import javax.activation.DataHandler;
import javax.activation.FileDataSource;
import javax.mail.*;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import java.security.GeneralSecurityException;
import java.util.Properties;
import java.util.Properties;

//網站三秒原則:用戶體驗
//多線程實現用戶體驗!異步處理
public class Sendmail extends Thread {
    //用於用戶發送郵件的郵箱
    private String from="[email protected]";
    //郵箱的用戶名
    private String username = "[email protected]";
    //郵箱的密碼
    private String password = "zvebnyyhhqsybjjj";
        //發送郵件的服務器地址
    private  String host = "smtp.qq.com";

    private User user;
    public Sendmail(User user){
        this.user=user;
    }
    //重寫run方法的實現,在run方法中發送郵件給指定的用戶


    @SneakyThrows
    @Override
    public void run() {

        Properties prop = new Properties();
        prop.setProperty("mail.host","smtp.qq.com");//設置qq郵箱服務器
        prop.setProperty("mail.transport.protocol","smtp");//郵箱發送協議
        prop.setProperty("mail.smtp.auth","true");//驗證用戶名密碼

        //關於QQ郵箱,還要設置SSL加密,加上一下代碼即可
        MailSSLSocketFactory sf = new MailSSLSocketFactory();
        sf.setTrustAllHosts(true);
        prop.put("mail.smtp.ssl.enable","true");
        prop.put("mail.smtp.ssl.socketFactory",sf);

        //使用javamail的五個步驟
        //1.創建定義整個應用程序所需的環境信息的session對象
        //創建定義整個應用程序所需的環境信息的Session對象
        Session session=Session.getDefaultInstance(prop, new Authenticator() {
            @Override
            //qq纔有,其他郵箱就不用
            protected PasswordAuthentication getPasswordAuthentication() {
                //發送人郵件用戶名,授權碼
                return new PasswordAuthentication("[email protected]","zvebnyyhhqsybjjj");
            }
        });
        //開啓session的debug模式,這樣就可以查看到程序發送Email的運行狀態
        session.setDebug(true);
        //2.通過session得到transport對象session.getTransport();
        Transport ts = session.getTransport();
        //3.使用郵箱的用戶名和授權碼連上郵件服務器
        ts.connect("[email protected]","zvebnyyhhqsybjjj");
        //4.創建郵箱:寫郵件
        //注意需要傳遞Session
        MimeMessage message = new MimeMessage(session);
        //指明郵件的發件人
        message.setFrom(new InternetAddress(from));
        //指明郵件的收件人,現在發件人和收件人是一樣的,那就是自己給自己發
        message.setRecipient(Message.RecipientType.TO,new InternetAddress(user.getEmail()));
        message.setSubject("用戶郵箱註冊");//郵件主題
        String info = "恭喜您註冊成功,您的用戶名:"+user.getUsername()+"您的密碼爲:"+user.getPassword()+"請妥善保管,如有問題請聯繫網站客服!";
        message.setContent(info,"text/html;charset=UTF-8");
        message.saveChanges();
        //5.發送郵件
        ts.sendMessage(message,message.getAllRecipients());
        //6.關閉鏈接
        ts.close();
    }
}

筆記自己看視頻做的,視頻鏈接如下:
B站地址:https://space.bilibili.com/95256449

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章