使用javax.mail发送邮件

一、导入maven依赖

复制代码
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mail</groupId>
    <artifactId>mail</artifactId>
    <version>0.0.1-SNAPSHOT</version>

    <dependencies>
        <!-- https://mvnrepository.com/artifact/com.sun.mail/javax.mail -->
        <dependency>
            <groupId>com.sun.mail</groupId>
            <artifactId>javax.mail</artifactId>
            <version>1.6.2</version>
        </dependency>

    </dependencies>
</project>
复制代码

 

二、封装邮件发送信息

复制代码
package com.mail.entity;

public class Mail {

    private String mailHostKey;//设置邮箱客户端(mail.smtp.host)
    private String mailHostValue;//设置邮箱客户端(smtp.qq.com)
    private String mailSubject;//设置邮件主题
    private String mailBody;//设置邮件正文
    private String mailSender;//设置邮件发件人
    private String mailPassword;//设置邮件发件人密码
    private String mailRecipientTO;//设置邮件收件人(多个收件人,以逗号隔开)
    private String mailRecipientCC;//设置邮件抄送人(多个抄送人,以逗号隔开)
    private boolean mailIsAuth;//是否设置身份认证
    private String mailAuth;//设置smtp身份认证(mail.smtp.auth)
    
    
    public Mail() {
        super();
        // TODO Auto-generated constructor stub
    }
    
    public Mail(String mailHostKey, String mailHostValue, String mailSubject, String mailBody, String mailSender,
            String mailPassword, String mailRecipientTO, String mailRecipientCC, boolean mailIsAuth, String mailAuth) {
        super();
        this.mailHostKey = mailHostKey;
        this.mailHostValue = mailHostValue;
        this.mailSubject = mailSubject;
        this.mailBody = mailBody;
        this.mailSender = mailSender;
        this.mailPassword = mailPassword;
        this.mailRecipientTO = mailRecipientTO;
        this.mailRecipientCC = mailRecipientCC;
        this.mailIsAuth = mailIsAuth;
        this.mailAuth = mailAuth;
    }
    public String getMailHostKey() {
        return mailHostKey;
    }
    public void setMailHostKey(String mailHostKey) {
        this.mailHostKey = mailHostKey;
    }
    public String getMailHostValue() {
        return mailHostValue;
    }
    public void setMailHostValue(String mailHostValue) {
        this.mailHostValue = mailHostValue;
    }
    public String getMailSubject() {
        return mailSubject;
    }
    public void setMailSubject(String mailSubject) {
        this.mailSubject = mailSubject;
    }
    public String getMailBody() {
        return mailBody;
    }
    public void setMailBody(String mailBody) {
        this.mailBody = mailBody;
    }
    public String getMailSender() {
        return mailSender;
    }
    public void setMailSender(String mailSender) {
        this.mailSender = mailSender;
    }
    public String getMailPassword() {
        return mailPassword;
    }
    public void setMailPassword(String mailPassword) {
        this.mailPassword = mailPassword;
    }
    public String getMailRecipientTO() {
        return mailRecipientTO;
    }
    public void setMailRecipientTO(String mailRecipientTO) {
        this.mailRecipientTO = mailRecipientTO;
    }
    public String getMailRecipientCC() {
        return mailRecipientCC;
    }
    public void setMailRecipientCC(String mailRecipientCC) {
        this.mailRecipientCC = mailRecipientCC;
    }
    public boolean isMailIsAuth() {
        return mailIsAuth;
    }
    public void setMailIsAuth(boolean mailIsAuth) {
        this.mailIsAuth = mailIsAuth;
    }
    public String getMailAuth() {
        return mailAuth;
    }
    public void setMailAuth(String mailAuth) {
        this.mailAuth = mailAuth;
    }
    
    
    
}
复制代码

三、封装发送邮件的工具类

复制代码
package com.mail.util;

import java.util.Properties;

import javax.mail.Address;
import javax.mail.BodyPart;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;

import com.mail.entity.Mail;

public class SendMail {
    public static String sendMail(Mail mail) {
        String msg = "设置系统属性";
        Properties props = System.getProperties();// 获得系统属性对象
        props.put(mail.getMailHostKey(), mail.getMailHostValue()); // 设置SMTP主机
        System.out.println(msg + "成功......");
        msg = "获取邮件会话对象";
        Session session = Session.getDefaultInstance(props, null); // 获取邮件会话对象!
        System.out.println(msg + "成功......");
        msg = "创建MIME邮件对象";
        MimeMessage mimeMsg = new MimeMessage(session); // 创建MIME邮件对象
        Multipart mp = new MimeMultipart();
        //设置smtp身份认证:mail.smtp.auth
        props.put(mail.getMailAuth(), mail.isMailIsAuth());
        try {
            msg = "设置邮件主题";
            mimeMsg.setSubject(mail.getMailSubject() == null ? "" : mail.getMailSubject());
            System.out.println(msg + "成功......");
            msg = "设置邮件正文";
            BodyPart bp = new MimeBodyPart();
            bp.setContent("" + mail.getMailBody() == null ? "" : mail.getMailBody(), "text/html;charset=GBK");
            mp.addBodyPart(bp);
            System.out.println(msg + "成功......");
            msg = "设置邮件收件人";
            mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress.parse(mail.getMailRecipientTO()));
            System.out.println(msg + "【" + mail.getMailRecipientTO() + "】");
            if(mail.getMailRecipientCC()!= null) {
                msg = "设置邮件抄送人";
                mimeMsg.setRecipients(Message.RecipientType.CC, (Address[]) InternetAddress.parse(mail.getMailRecipientCC()));
                System.out.println(msg + "【" + mail.getMailRecipientCC() + "】");
            }
            msg = "设置邮件发信人";
            mimeMsg.setFrom(new InternetAddress(mail.getMailSender())); // 设置发信人
            System.out.println(msg + "【" + mail.getMailSender() + "】");
            mimeMsg.setContent(mp);
            mimeMsg.saveChanges();
            System.out.println("正在发送邮件....");
            msg = "邮件发送";
            Session mailSession = Session.getInstance(props, null);
            Transport transport = mailSession.getTransport("smtp");
            transport.connect(mail.getMailHostValue(), mail.getMailSender(), mail.getMailPassword());
            transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.TO));
            if (mimeMsg.getRecipients(Message.RecipientType.CC) != null) {
                transport.sendMessage(mimeMsg, mimeMsg.getRecipients(Message.RecipientType.CC));
            }
            System.out.println(msg + "成功......");
            transport.close();
        } catch (MessagingException e) {
            System.out.println(msg + "失败......");
            e.printStackTrace();
            System.out.println(e.getLocalizedMessage());
            return msg + "失败......";
        }
        return msg + "成功......";
    }

}
复制代码

四、测试

复制代码
package com.mail.test;

import com.mail.util.SendMail;

public class TestMail {
    public static void main(String[] args) {
        com.mail.entity.Mail mail = new com.mail.entity.Mail("mail.smtp.host", "smtp.qq.com", "主题", "内容", "发送人@qq.com", "发送人密码", "收件人1@qq.com,收件人2@qq.com", null, true, "mail.smtp.auth");
        String msg = SendMail.sendMail(mail);
        System.out.println(msg);
    }
}
复制代码

五、结果显示

 

 

posted @   微微江水  阅读(661)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示