SpringBoot中如何使用代码来实现发送邮件的功能

第一步:在pom文件中导入对应的依赖。

<dependency>
    <groupId>com.sun.mail</groupId>
    <artifactId>javax.mail</artifactId>
    <version>1.6.2</version>
</dependency>

第二步:编写工具类,连接至SMTP服务器并创建session会话 ,并实现不同需求下发送邮件的方法。

import com.example.timertest.constant.SendMailConstant;
import org.springframework.web.multipart.MultipartFile;

import javax.activation.DataHandler;
import javax.mail.*;
import javax.mail.internet.*;
import javax.mail.util.ByteArrayDataSource;
import java.io.IOException;
import java.util.List;
import java.util.Properties;

public class MailSendUtil {

    /**
     * 根据邮箱服务器信息创建session对象
     * @return
     */
    public static Session createSession() {
        //	账号信息
        String username = SendMailConstant.SEND_MAIL_USER;//邮箱发送账号
        String password = SendMailConstant.SEND_MAIL_CODE;//邮箱授权码

        //	创建一个配置文件,并保存
        Properties props = new Properties();

        //	SMTP服务器连接信息
        //  126——smtp.126.com
        //  163——smtp.163.com
        props.put("mail.smtp.host", SendMailConstant.SEND_MAIL_HOST);//	SMTP主机名

        //  126——25
        //  163——465
        final String smtpPort = SendMailConstant.SEND_MAIL_PORT;

        props.setProperty("mail.smtp.port", smtpPort);
        props.put("mail.smtp.auth", "true");//是否需要用户认证

        // 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),
        // 如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,开启SSL安全连接
        // SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
        // 需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
        // QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
        props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.setProperty("mail.smtp.socketFactory.fallback", "false");
        props.setProperty("mail.smtp.socketFactory.port", smtpPort);

        props.put("mail.smtp.starttls.enable", "true");//启用TlS加密

        Session session = Session.getInstance(props,new Authenticator() {
            @Override
            protected PasswordAuthentication getPasswordAuthentication() {
                // TODO Auto-generated method stub
                return new PasswordAuthentication(username,password);
            }
        });

        //  控制台打印调试信息
        session.setDebug(true);
        return session;

    }

    /**
     * 发送文本类型邮件
     * @param subject 邮件主题
     * @param sendMessage 邮件内容
     * @param sendUser 发件人
     * @param acceptUserList 收件人列表
     */
    public static void textMailSend (String subject, String sendMessage, String sendUser, List<String> acceptUserList){
        //	创建Session会话
        Session session = createSession();

        //	创建邮件对象
        MimeMessage message = new MimeMessage(session);
        try {
            message.setSubject(subject);
            //这里的sendMessage可以是一个String类型的html网页字符串,以此来设置sendMessage的换行等格式,如果直接用转义字符进行换行等操作,则不会生效(已测)
            message.setContent(sendMessage,"text/html;charset=UTF-8");
            message.setFrom(new InternetAddress(sendUser));//设置发件人邮箱
            for (String acceptUser : acceptUserList) {
                InternetAddress to = new InternetAddress(acceptUser);
                message.addRecipient(Message.RecipientType.TO, to);//设置收件人邮箱
            }
            //发送
            Transport.send(message);
        } catch (MessagingException e) {
            e.printStackTrace();
        }
    }

    /**
     * 发送带附件的邮件(可指定收件人和抄送人),Word,Excel,图片等都可以(具体可以上传哪些类型需自测)
     * @param subject 邮件主题
     * @param sendMessage 邮件内容
     * @param sendUser 发件人
     * @param acceptUserList 收件人列表
     * @param extractsUserList 抄送人列表
     * @param extractsFile 附件
     */
    public static void withFileMailSend (String subject, String sendMessage, String sendUser, List<String> acceptUserList, List<String> extractsUserList, MultipartFile extractsFile){
        try {
            //	创建会话
            Session session = createSession();

            //	创建邮件
            MimeMessage message = new MimeMessage(session);
            message.setFrom(sendUser);//发件人邮箱

            for (String acceptUser : acceptUserList) {
                message.setRecipient(Message.RecipientType.TO, new InternetAddress(acceptUser));//主要收件人邮箱
            }
            InternetAddress[] InternetAddressArr = new InternetAddress[extractsUserList.size()];
            int index = 0;
            for(String extractsUser : extractsUserList){
                InternetAddressArr[index] = new  InternetAddress(extractsUser);
                index++;
            }
            message.setRecipients(Message.RecipientType.CC, InternetAddressArr);//抄送人邮箱
            message.setSubject(subject);

            //	邮件主体
            BodyPart textPart = new MimeBodyPart();
            textPart.setContent(sendMessage,"text/html;charset=utf-8");

            //	邮件附件
            BodyPart filePart = new MimeBodyPart();
            filePart.setFileName(extractsFile.getOriginalFilename());//附件显示名字.类型名


            //	提交附件文件
            filePart.setDataHandler(new DataHandler(new ByteArrayDataSource(extractsFile.getInputStream(),"application/octet-stream")));

            Multipart multipart = new MimeMultipart();
            multipart.addBodyPart(textPart);
            multipart.addBodyPart(filePart);

            //	将邮件装入信封
            message.setContent(multipart);

            Transport.send(message);
        } catch (AddressException e) {
            e.printStackTrace();
        } catch (MessagingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

以下是如何获取邮箱授权码

163邮箱相关连接信息SendMailConstant 


public class SendMailConstant {

    public static final String SEND_MAIL_USER = "xxx1@163.com";//发件人账号
    public static final String SEND_MAIL_CODE = ""; //16位邮箱授权码
    public static final String SEND_MAIL_HOST = "smtp.163.com"; //SMTP主机名
    public static final String SEND_MAIL_PORT = "465"; //邮箱授权码

}

  • 9
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

代码搬运工程师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值