关于Java发送邮件

前言: Jakarta Mail 的前⽣是 JavaMail JavaMail 最后⼀个版本是于 2018 8 ⽉发布,已经停⽌更新。新项⽬应该使⽤
简介:
JavaMail ,顾名思义,提供给开发者处理电⼦邮件相关的编程接⼝。它是 Sun 发布的⽤来处理 email API 。它可以⽅
便地执⾏⼀些常⽤的邮件传输。我们可以基于 JavaMail 开发出类似于 Microsoft Outlook 的应⽤程序。
JavaMail 包中⽤于处理电⼦邮件的核⼼类是: Session,Message,Address,Authenticator,Transport,Store,Folder 等。
Session 定义了⼀个基本的邮件会话,它需要从 Properties 中读取类似于邮件服务器,⽤户名和密码等信息。
另外很好的实现了 JavaMail API 的框架有 James Spring Mail

一、下载Mail jar包

java Mail jar包 下载地址
https://www.oracle.com/
下面讲解如何在Oracle网找到JavaMail jar 包
第一步、就是复制粘贴我上面的链接进入Oracle网
第二步、点开搜索输入
JavaMail API
关于Java发送邮件_第1张图片

第二步、点击进入 DOWNLOAD
关于Java发送邮件_第2张图片

第三步、选择版本,选择 ‘Mail1.4.7’版本

注意:这里选择版本很重要,如果选错可能会出问题

如果使用 eclipse开发工具则选择1.6.0版本

如果使用 IDEA开发工具则选择1.4.7版本

关于Java发送邮件_第3张图片

第四步、下载
关于Java发送邮件_第4张图片

Maven项目如何获取Mail jar包?

直接上教程

第一步、进入官网:https://mvnrepository.com/

第二步、在官网里搜索 Mail

第三、点击第一条进入

关于Java发送邮件_第5张图片

第四步、找到你要的版本

注意:这里选择版本很重要,如果选错可能会出问题

如果使用 eclipse开发工具则选择1.6.0版本

如果使用 IDEA开发工具则选择1.4.7版本

关于Java发送邮件_第6张图片

第五步、点击版本 1.4.7进入

关于Java发送邮件_第7张图片

第六步、复制


  
      com.sun.mail
      javax.mail
      1.6.2
 

    javax.mail
    javax.mail-api
    1.4.7

第七步、打开Maven项目,找到pom.xml,然后复制粘贴下去,在pom.xml刷新一下就好了

关于Java发送邮件_第8张图片

二、应用

1、发送邮件

1) 首先开启 邮箱的 SMTP 服务

  • 这里我就用QQ邮箱示范
    • 打开QQ
    • 进入QQ邮箱
    • 找到设置,点击设置
    • 进入设置之后点击账户
    • 然后找到SMTP
    • 找到之后,进入‘管理服务’
    • 在‘管理服务’找到 安全设置
    • 在 安全设置 找到SMTP服务
    • 最后生成‘授权码’
    • 不懂的看图

第一步

第二步

第三步

关于Java发送邮件_第9张图片

 第四步、往下拉找到 SMTP服务,我这里已经开启了

关于Java发送邮件_第10张图片

第五步、进入‘管理服务’

关于Java发送邮件_第11张图片

第六步、找到 安全设置

关于Java发送邮件_第12张图片

第七、知道 SMTP 服务

关于Java发送邮件_第13张图片

第八、开启授权码

注意:生成授权码之后,一定要保存好,还有不要被 ’有心人’知道,这个码很重要

如果被‘有心人’得到,可能会通过发邮箱的方式进行诈骗,诈骗亲朋好友

还有,如果不想用了,就关闭服务 ‘不给有心人可乘的机会’ 或者在授权管理那里把生成的授权码停用

总之,授权码,一定要保管妥当

2)编写代码

package cms.project.dom.util;

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

/***
 * @Date(时间)2023-05-12
 * @Author xx
 *
 *
 *
 * 发送邮件
 */
public class Email_Code {

    /**
     * 发件⼈邮箱地址
     */
    private static final String SEND_ACCOUNT = "[email protected]"; //QQ邮箱地址
    /**
     * 发件⼈邮箱密码 - 登录邮件开启 SMTP 服务后,邮件服务商⽣成的“授权码”
     */
    private static final String SEND_PASSWORD = "xx"; //授权码
    /**
     * 发件⼈SMTP服务器地址,⼀般的格式为:smtp.xxx.com,其中xxx为邮件服务商名称
     */
    private static final String SMTP_HOST = "smtp.qq.com";
    /**
     * 收件⼈邮箱地址
     */
    private static final String RECEIVE_ACCOUNT = "[email protected]"; //收件人的QQ邮箱地址

    //发件人名称
    private static final String staff_name = "辉哥"; //你的名字

    //收件人姓名
    private static final String name = "小美"; //你朋友的名字

    //发送的主题
    private static final String ZHUTI = "我爱你"; //主题


    //测试一下

    public static void main(String[] args) throws Exception {
        // 参数配置,⽤于连接邮件服务器
        Properties props = new Properties();
        // 使⽤协议
        props.setProperty("mail.transport.protocol", "smtp");
        // 发件⼈邮箱的 SMTP 服务器地址
        props.setProperty("mail.smtp.host", SMTP_HOST);
        // 需要请求认证
        props.setProperty("mail.smtp.auth", "true");
        // 创建会话对象,⽤于与邮箱服务器交互
        Session session = Session.getInstance(props);
        // 设置为debug模式,在控制台中可以查看详细的发送⽇志
        session.setDebug(true);
        // 创建⼀封邮件
        MimeMessage message = createMimeMessage(session, SEND_ACCOUNT, RECEIVE_ACCOUNT,name,ZHUTI,staff_name);

        // 根据 Session 获取邮件传输对象
        Transport transport = session.getTransport();
        // 连接邮件服务器
        transport.connect(SEND_ACCOUNT, SEND_PASSWORD);
        // 发送邮件
        transport.sendMessage(message, message.getAllRecipients());
        // 关闭连接
        transport.close();
    }

    /**
     * 创建⼀封简单邮件
     *
     * @param session
     * @param fromAccount
     * @param toAccount
     * @return
     * @throws Exception
     */
    public static MimeMessage createMimeMessage(Session session, String fromAccount, String toAccount,String name,String ZHUTI,String staff_name)
            throws Exception {
        // 1.创建邮件对象
        MimeMessage message = new MimeMessage(session);
        // 2.设置发件⼈,其中 InternetAddress 有三个参数,分别为:邮箱,显示的昵称,昵称的字符集编码
        message.setFrom(new InternetAddress(fromAccount, staff_name, "UTF-8"));

        // 3.设置收件⼈ - MimeMessage.RecipientType.TO
        message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(toAccount ,name, "UTF-8"));

        // 7.设置邮件主题
        message.setSubject("会飞的鸟","UTF-8");

        // 8.设置邮件正⽂内容,指定格式为HTML格式
        message.setContent(ZHUTI, "text/html;charset=UTF-8");
        // 9.设置显示发件时间
        message.setSentDate(new Date());

        // 10.保存设置
        message.saveChanges();

        return message;
    }
}

3)封装一下Email_Code类,调用时,更简洁

package cms.project.dom.util;

import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.MimeMessage;
import java.util.Properties;
import java.util.Random;

import static cms.project.dom.util.Email_Code.createMimeMessage;

/***
 * @Date(时间)2023-05-13
 * @Author 半杯可可
 *
 *
 *
 * 邮箱发送封装
 */
public class Mail {
    /***
     *
     * @param EMAIL 发件人邮箱地址
     * @param AUTHORIZECODE 授权码
     * @param Verify_NAME 发件标题
     */
    public static void Mail_Code (String EMAIL,String AUTHORIZECODE,String Verify_NAME){
        //发送邮箱验证

        /**
         * 发件⼈邮箱地址
         */
        String SEND_ACCOUNT =EMAIL ;
        /**
         * 发件⼈邮箱密码 - 登录邮件开启 SMTP 服务后,邮件服务商⽣成的“授权码”
         */
        String SEND_PASSWORD = AUTHORIZECODE;//授权码
        /**
         * 发件⼈SMTP服务器地址,⼀般的格式为:smtp.xxx.com,其中xxx为邮件服务商名称
         */
        String SMTP_HOST = "smtp.qq.com";
        /**
         * 收件⼈邮箱地址
         * [email protected]
         */
        String RECEIVE_ACCOUNT = EMAIL;

        //发件标题,'如:校园论坛'
        String Verify= Verify_NAME;

        //收件人姓名 ,如‘张三’
        String NAME = EMAIL+"用户";


        //随机生成验证码

         Random random = new Random();
         int randomNumber = random.nextInt(900000) + 100000;
         String EM_Code = String.valueOf(randomNumber );
        //发送的主题
        String ZHUTI = "校园论坛验证码:"+EM_Code;

        // 参数配置,⽤于连接邮件服务器
        Properties props = new Properties();
        // 使⽤协议
        props.setProperty("mail.transport.protocol", "smtp");
        // 发件⼈邮箱的 SMTP 服务器地址
        props.setProperty("mail.smtp.host", SMTP_HOST);
        // 需要请求认证
        props.setProperty("mail.smtp.auth", "true");
        // 创建会话对象,⽤于与邮箱服务器交互
        Session sessions = Session.getInstance(props);
        // 设置为debug模式,在控制台中可以查看详细的发送⽇志
        sessions.setDebug(true);

        try {
            //创建一封邮件
            MimeMessage message = createMimeMessage(sessions, SEND_ACCOUNT, RECEIVE_ACCOUNT,NAME,ZHUTI,Verify);

            // 根据 Session 获取邮件传输对象
            Transport transport = sessions.getTransport();
            // 连接邮件服务器
            transport.connect(SEND_ACCOUNT, SEND_PASSWORD);
            // 发送邮件
            transport.sendMessage(message, message.getAllRecipients());
            // 关闭连接
            transport.close();



        }catch (Exception e){
            e.printStackTrace();
        }
    }

}

4)测试一下

  public static void main(String[] args) {
        Mail.Mail_Code("[email protected]","输入授权码","校园论坛");
    }

5)测试结果

关于Java发送邮件_第14张图片

我这里发送邮件,是发送验证码,大家可以举一反三,可以拿来发送信息等操作

半杯不啰嗦,就写到这里了,希望得到帮助的伙伴,一键三连!

你可能感兴趣的:(java,开发语言,spring)