Java发送邮件

1,093 阅读1分钟

使用Java发送邮件很简单,首先搞个邮箱,我们就以qq邮箱为例,登录qq邮箱,在设置中开启IMAP/SMTP服务,获取授权码即可,这样前期的邮件设置工作就完成了。

1、获取邮箱授权码

image-20210514145811398

image-20210514150026863

image-20210514150233511

2、在Java程序中调用接口发送邮件

Java发送邮件需要先配置mail这个jar包,如果你的项目是maven,可在pom.xml中直接配置。

<!-- https://mvnrepository.com/artifact/javax.mail/javax.mail-api -->
<dependency >
  <groupId >javax.mail</groupId >
  <artifactId >mail</artifactId >
  <version >1.4.7</version >
</dependency >

如果需要下载jar包导入的话,点击我跳转,然后下载jar包即可。

image-20210514150806678

然后复制下面的代码,在main函数中测试即可,记得修改静态变量哦,设置你的邮箱和授权码

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.Date;
import java.util.List;
import java.util.Properties;

/**
 * @description: 邮箱工具类
 * @author: 五香麻辣大白兔 51bishe.site
 * @time: 2021/5/14 12:01
 */
public class MailUtil {

    // 发送人
    public static final String FROM_ARRDESS = "你的邮箱地址";
    // qq邮箱授权码
    public static final String AUTH_CODE = "你的邮箱授权码";

    /**
     * 发送单封邮件
     * @param title 邮件标题
     * @param content 邮件内容
     * @param receiveAddress 收件人邮箱地址
     * @throws MessagingException
     */
    public static void sendTextMail (String title, String content, String receiveAddress) throws MessagingException {
        //把收件人放入对象中
        Session session = createSession();
        Message message = createMessage(session, title, content);
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(receiveAddress));
        sendMail(session, message);
    }


    /**
     * 批量发送邮件
     * @param title 邮件标题
     * @param content 邮件内容
     * @param addressList 收件人邮箱地址数组
     * @throws MessagingException
     */
    public static void batchSendTextMail (String title, String content, List<String> addressList) throws MessagingException {
        //把收件人放入对象中
        InternetAddress[] recipients = new InternetAddress[addressList.size()];
        for(int i = 0 ; i< addressList.size() ;i++){
            recipients[i] = new InternetAddress(addressList.get(i));
        }
        Session session = createSession();
        Message message = createMessage(session, title, content);
        message.setRecipients(Message.RecipientType.TO, recipients);
        sendMail(session, message);
    }

    /**
     * 产生链接
     * @return
     */
    public static Session createSession () {
        Properties properties = new Properties();
        // 连接协议
        properties.put("mail.transport.protocol", "smtp");
        // 主机名
        properties.put("mail.smtp.host", "smtp.qq.com");
        // 端口号
        properties.put("mail.smtp.port", 465);
        properties.put("mail.smtp.auth", "true");
        // 设置是否使用ssl安全连接 ---一般都使用
        properties.put("mail.smtp.ssl.enable", "true");
        // 设置是否显示debug信息 true 会在控制台显示相关信息
        properties.put("mail.debug", "true");
        // 得到回话对象
        return Session.getInstance(properties);
    }

    /**
     *  创建message对象
     * @param session
     * @param title
     * @param content
     * @return
     * @throws MessagingException
     */
    public static Message createMessage (Session session, String title, String content) throws MessagingException {
        // 获取邮件对象
        Message message = new MimeMessage(session);
        // 设置发件人邮箱地址
        message.setFrom(new InternetAddress(FROM_ARRDESS));
        // 设置邮件标题
        message.setSubject(title);
        // 设置邮件内容
        message.setContent(content, "text/html;charset=gb2312");
        return message;
    }

    /**
     *  发送邮件
     * @param session
     * @param message
     * @throws MessagingException
     */
    public static void sendMail(Session session, Message message) throws MessagingException {
        // 得到邮差对象
        Transport transport = session.getTransport();
        // 连接自己的邮箱账户
        // 密码为QQ邮箱开通的stmp服务后得到的客户端授权码
        transport.connect(FROM_ARRDESS, AUTH_CODE);
        // 发送邮件
        transport.sendMessage(message, message.getAllRecipients());
        transport.close();
    }
}

其中content是支持html代码的,可以设置文字的样式、插入图片。

如果感觉此篇文章对你有用,麻烦你在同学中帮忙宣传下,谢谢。

个人博客:www.51bishe.site