日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

Java实现发邮件功能---网易邮箱

發(fā)布時(shí)間:2023/12/13 综合教程 25 生活家
生活随笔 收集整理的這篇文章主要介紹了 Java实现发邮件功能---网易邮箱 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

目錄Java實(shí)現(xiàn)發(fā)郵件功能前言開(kāi)發(fā)環(huán)境代碼效果結(jié)束語(yǔ)

Java實(shí)現(xiàn)發(fā)郵件功能

前言

電子郵件的應(yīng)用場(chǎng)景非常廣泛,例如新用戶(hù)加入,即時(shí)發(fā)送優(yōu)惠清單、通過(guò)郵件找回密碼、監(jiān)聽(tīng)后臺(tái)程序,出現(xiàn)異常自動(dòng)郵件通知等。

本文以網(wǎng)易郵箱為例,通過(guò)Java代碼實(shí)現(xiàn)發(fā)送郵件功能。

開(kāi)發(fā)環(huán)境

請(qǐng)參照: 基于SpringBoot構(gòu)建分模塊項(xiàng)目

代碼

pom.xml引入依賴(lài)

<properties>
    <java.version>1.8</java.version>
    <!-- 你的其他依賴(lài)... -->
    <javax.mail.version>1.6.0</javax.mail.version>
</properties>

<dependencies>
    <!-- 你的其他依賴(lài)... -->
    <!-- 發(fā)送短信 -->
    <dependency>
        <groupId>com.sun.mail</groupId>
        <artifactId>javax.mail</artifactId>
        <version>${javax.mail.version}</version>
    </dependency>
</dependencies>

發(fā)送郵件工具類(lèi)

package com.wayne.common.utils;

import com.wayne.common.entity.CmsMailConfig;
import com.wayne.common.vo.MailVo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

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

/**
 * 發(fā)送郵件工具類(lèi)
 * @author Wayne
 * @date 2019/6/19
 */
@Component
public class MailUtils {

    /**
     * 發(fā)送郵件
     * @param isSingle 是否單發(fā): true-單發(fā) false-群發(fā)
     * @param mailVo 郵件內(nèi)容
     * @param sendTime 發(fā)送時(shí)間, 如果為null,表示立即發(fā)送
     * @param mailConfig 發(fā)件人信息及授權(quán)
     */
    public void sendMail(Boolean isSingle, MailVo mailVo, Date sendTime, CmsMailConfig mailConfig) throws MessagingException {
        Session session = this.authenticationMail();
        MimeMessage message = getMimeMessage(isSingle, session, mailConfig.getMailAccount(), mailVo.getRecipients());
        message = getContent(message, mailVo.getMailTiTle(), mailVo.getMailContent(), sendTime);

        Transport transport = session.getTransport();
        transport.connect(mailConfig.getMailAccount(), mailConfig.getMailLicense());
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }

    /**
     * 校驗(yàn)發(fā)送的郵件內(nèi)容
     */
    private MimeMessage getContent(MimeMessage message, String messageTitle, String messageContent, Date sendTime) throws MessagingException {
        if (null == messageTitle) {
            throw new MessagingException("郵件標(biāo)題不能為空");
        }
        if (null == messageContent) {
            throw new MessagingException("郵件內(nèi)容不能為空");
        }
        sendTime = sendTime == null ? new Date() : sendTime;
        message.setSubject(messageTitle, "UTF-8");
        message.setContent(messageContent, "text/html;charset=UTF-8");
        message.setSentDate(sendTime);
        return message;
    }

    /**
     * 驗(yàn)證認(rèn)證信息
     */
    private Session authenticationMail() throws MessagingException {
        Session session;
        try {
            Properties props = new Properties();
            //設(shè)置用戶(hù)的認(rèn)證方式
            props.setProperty("mail.smtp.auth", "true");
            //設(shè)置傳輸協(xié)議
            props.setProperty("mail.transport.protocol", "smtp");
            //設(shè)置發(fā)件人的SMTP服務(wù)器地址
            props.setProperty("mail.smtp.host", "smtp.163.com");
            session = Session.getInstance(props);
            session.setDebug(true);
        } catch (Exception e) {
            e.printStackTrace();
            throw new MessagingException("認(rèn)證失敗");
        }
        return session;
    }

    /**
     * @param isSingle 是否單發(fā)
     *                 <P>true-向指定的一個(gè)收件人發(fā)送郵件,比如:找回密碼、登錄驗(yàn)證
     *                 <P>false-向多個(gè)收件人群發(fā)郵件,比如:優(yōu)惠活動(dòng)推送
     *                 <P>群發(fā)時(shí)多個(gè)收件人之間用英文逗號(hào)','分割
     * @param senderAddress 發(fā)件人地址
     * @param recipientAddress 收件人地址
     */
    private MimeMessage getMimeMessage(Boolean isSingle, Session session, String senderAddress, String recipientAddress) throws MessagingException {
        MimeMessage message = new MimeMessage(session);
        try {
            message.setFrom(new InternetAddress(senderAddress));
        } catch (MessagingException e) {
            throw new MessagingException("發(fā)件人地址錯(cuò)誤");
        }
        /*
          設(shè)置收件人地址
          MimeMessage.RecipientType.TO:發(fā)送
          MimeMessage.RecipientType.CC:抄送
          MimeMessage.RecipientType.BCC:密送
         */
        if (isSingle) {
            message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(recipientAddress));
        } else {
            message.setRecipients(Message.RecipientType.TO, InternetAddress.parse(recipientAddress));
        }
        return message;
    }
}

郵件內(nèi)容對(duì)象-MailVo

package com.wayne.common.vo;

import lombok.Data;

/**
 * @author Wayne
 * @date 2019/6/24
 */
@Data
public class MailVo {
    /**
     * 郵件標(biāo)題
     */
    private String mailTiTle;
    /**
     * 郵件內(nèi)容
     */
    private String mailContent;
    /**
     * 收件人(們)
     */
    private String recipients;
}

發(fā)件人信息及授權(quán)

注: 此處我假定有多個(gè)發(fā)件人,且不確定,可以動(dòng)態(tài)添加、選擇由哪個(gè)發(fā)件人發(fā)送,因此我將發(fā)件人信息存儲(chǔ)在數(shù)據(jù)庫(kù)中。假如你的應(yīng)用中發(fā)件人是固定的,則此處可寫(xiě)在項(xiàng)目中或配在配置文件!

我們正常發(fā)送郵件時(shí)需要輸入密碼,登錄我們的郵箱賬戶(hù)。而通過(guò)程序發(fā)送郵件不需要密碼登錄,而是使用授權(quán)碼,網(wǎng)易郵箱授權(quán)碼獲得方式如下

啟用授權(quán)

獲得授權(quán)碼

package com.wayne.common.entity;

import lombok.Data;

import javax.persistence.*;

@Data
@Table(name = "cms_mail_config")
public class CmsMailConfig {
    /**
     * 主鍵
     */
    @Id
    @Column(name = "MAIL_ID")
    private Integer mailId;

    /**
     * 郵箱賬號(hào)
     */
    @Column(name = "MAIL_ACCOUNT")
    private String mailAccount;

    /**
     * 授權(quán)碼
     */
    @Column(name = "MAIL_LICENSE")
    private String mailLicense;

    /**
     * 狀態(tài),0:使用,1:未使用
     */
    @Column(name = "IS_USE")
    private String isUse;

    /**
     * 是否刪除,0:否,1:是
     */
    @Column(name = "IS_DELETE")
    private String isDelete;

    /**
     * 創(chuàng)建者ID
     */
    @Column(name = "CREATE_ADMIN_ID")
    private Integer createAdminId;

    @Column(name = "EXTEND1")
    private String extend1;

    @Column(name = "EXTEND2")
    private String extend2;

    @Column(name = "EXTEND3")
    private String extend3;

    @Column(name = "EXTEND4")
    private String extend4;

    @Column(name = "EXTEND5")
    private String extend5;

    @Column(name = "EXTEND6")
    private String extend6;
}

Service

@Override
public ResponseBean sendMails(MailVo mailVo) {
    if (null == mailVo) {
        return ResponseBean.createInstance(Boolean.FALSE, 400, "參數(shù)異常");
    }
    // 獲取當(dāng)前正在使用的發(fā)件人配置
    List<CmsMailConfig> mailConfigList = mailConfigMapper.selectCurrUseMailConfig();
    if (null == mailConfigList || mailConfigList.size() != 1) {
        return ResponseBean.createInstance(Boolean.FALSE, 400, "參數(shù)異常");
    }

    try {
        // 發(fā)送郵件
        mailUtils.sendMail(Boolean.FALSE, mailVo, null, mailConfigList.get(0));
        return ResponseBean.createInstance();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return ResponseBean.createInstance(Boolean.FALSE, 400, "參數(shù)異常");
}

Controller

@PostMapping("/mail/sendMails")
public ResponseBean sendMails(MailVo mailVo) {
    return mailService.sendMails(mailVo);
}

效果

此處發(fā)送為手動(dòng)發(fā)送,主要體驗(yàn)代碼功能。具體應(yīng)用場(chǎng)景可根據(jù)實(shí)際生產(chǎn)環(huán)境,隨機(jī)應(yīng)變。比如:通過(guò)結(jié)合定時(shí)器任務(wù),每天定時(shí)發(fā)送報(bào)表;檢測(cè)用戶(hù)登錄地址不是常用地址時(shí),自動(dòng)發(fā)郵件通知用戶(hù);普通用戶(hù)登錄時(shí),觸發(fā)發(fā)送郵件向管理員等

結(jié)束語(yǔ)

本人已開(kāi)通公眾號(hào),歡迎大家前來(lái)灌水

總結(jié)

以上是生活随笔為你收集整理的Java实现发邮件功能---网易邮箱的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。