spring email 发送功能

打印 上一主题 下一主题

主题 822|帖子 822|积分 2466

  1. 邮件通知是现代应用中常见的一种通信方式,特别是在需要及时反馈、告警或重要事件通知的场景下。Spring Boot提供了简单而强大的邮件发送功能,本文将通过pring Boot中使用JavaMailSender 接口实现邮件发送。
复制代码
利用场景分析
  1. 注册验证:在用户注册、商户注册时,通过邮件发送验证码进行身份确认和账户激活。
  2. 网站营销:向潜在用户发送营销信息或者广告邮件。
  3. 数据监控、报警通知: 对业务类型数据及报警进行通知,达到一个监控目的。
  4. 身份安全验证:在用户修改密码、解锁账户等关键操作时,通过邮件发送安全验证码来增强账户安全性。
  5. 普通文本邮件、附件返送邮件:满足不同需求邮件发送需求。
复制代码
实现分析
1、邮件依赖包
  1. <dependency>
  2.        <groupId>org.springframework.boot</groupId>
  3.        <artifactId>spring-boot-starter-mail</artifactId>
  4. </dependency>
复制代码
2、配置参数(yml文件配置信息)、以下内容以163邮件为例。
  1. spring:
  2.   mail:
  3.     host: smtp.163.com
  4.     #邮箱名字
  5.     username: 东北大亨@163.com
  6.     # 邮箱密码或者密钥、注意此处为授权邮箱授权码
  7.     password: ZXESDSFGFGGGGSS
  8.     port: 465
  9.     protocol: smtp
  10.     default-encoding: utf-8
  11.     properties:
  12.       mail:
  13.         smtp:
  14.           auth: true
  15.           starttls:
  16.             enable: true
  17.             required: true
  18.           ssl:
  19.             enable: true
  20.           socketFactory:
  21.             port: 465
  22.             class: javax.net.ssl.SSLSocketFactory
复制代码
3、创建邮件发送服务类
3.1 接口类
  1. /**
  2. * @author :jack.zhao
  3. * @description :发送邮件接口
  4. * @version: V1.0.0
  5. * @create :2019/5/16 10:47
  6. */
  7. public interface IsendMailService {
  8.    
  9.     /**
  10.      * 发送普通邮件
  11.      * @param to 收件地址
  12.      * @param subject 标题
  13.      * @param text    正文
  14.      */
  15.     void sendSimpleEmail(String to,String subject,String text);
  16.     /**
  17.      * @param to 收件地址
  18.      * @param subject 标题
  19.      * @param text    正文
  20.      * @param attach  附件
  21.      */
  22.     void sendAttachmentMail(String to, String subject, String text, MultipartFile attach) throws MessagingException, IOException;
  23. }
复制代码
3.2 邮件发送接口实现类
  1. package com.toll.northeasttycoon.service.Impl;
  2. import com.toll.auth.service.IEmailService;
  3. import org.springframework.beans.factory.annotation.Value;
  4. import org.springframework.core.io.ByteArrayResource;
  5. import org.springframework.mail.SimpleMailMessage;
  6. import org.springframework.mail.javamail.JavaMailSender;
  7. import org.springframework.mail.javamail.MimeMessageHelper;
  8. import org.springframework.stereotype.Service;
  9. import org.springframework.web.multipart.MultipartFile;
  10. import javax.annotation.Resource;
  11. import javax.mail.MessagingException;
  12. import javax.mail.internet.MimeMessage;
  13. import java.io.IOException;
  14. /**
  15. * @author :jack.zhao
  16. * @description :发送邮件服务类
  17. * @version: V1.0.0
  18. * @create :2019/5/16 10:48
  19. */
  20. @Service
  21. public class EmailSendServiceImpl implements ISendEmailService {
  22.    /***  发送邮件邮箱 */
  23.     @Value("${spring.mail.username}")
  24.     private String account;
  25.     @Resource
  26.     private JavaMailSender javaMailSender;<br>
  27.     @Override
  28.     public void sendSimpleEmail(String to, String subject, String text) {
  29.         SimpleMailMessage message = new SimpleMailMessage();
  30.         message.setTo(to);
  31.         message.setSubject(subject);
  32.         message.setText(text);
  33.         message.setFrom(account);
  34.         javaMailSender.send(message);
  35.     }
  36.     /**
  37.      * @param to 收件地址
  38.      * @param subject 标题
  39.      * @param text    正文
  40.      * @param attach  附件
  41.      */
  42.     @Override
  43.     public void sendAttachmentMail(String to, String subject, String text, MultipartFile attach) throws MessagingException, IOException {
  44.         MimeMessage mimeMailMessage = javaMailSender.createMimeMessage();
  45.         MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMailMessage, true);
  46.         mimeMessageHelper.setFrom(account);
  47.         mimeMessageHelper.setTo(new String[]{to});
  48.         mimeMessageHelper.setSubject(subject);
  49.         mimeMessageHelper.setText(text);
  50.         // 获取附件的文件名和后缀名
  51.         String fileName = attach.getOriginalFilename();
  52.         String fileExtension = fileName.substring(fileName.lastIndexOf(".") + 1);
  53.         // 读取附件内容
  54.         byte[] bytes = attach.getBytes();
  55.         // 新的资源对象来存储附件内容
  56.         ByteArrayResource attachmentResource = new ByteArrayResource(bytes);
  57.         // 添加附件,使用完整的文件名(包括后缀名)
  58.         mimeMessageHelper.addAttachment(fileName, attachmentResource);
  59.         javaMailSender.send(mimeMailMessage);
  60.     }
  61. }
复制代码
3.3 调用发送邮件
  1.     @Resource
  2.     private IEmailService iEmailService;
  3.     String rcvEmail = "接收邮件邮箱";
  4.     // 发送主题
  5.     String subject = "邮件主题";
  6.     // 发送内容
  7.     String content= “发送内容”;
  8.     iEmailService.sendEmail(rcvEmail ,subject,content);
复制代码
留意:在实现中可能碰到几个问题
1、550 User has no permission
      

 2、发生 com.sun.mail.smtp.SMTPSenderFailedException: 553 Mail from must equal authorized user
 

 3、535 Error:authentication failed
   就是在配置文件yml配置的password应该是授权密码,而不是邮箱密码。
末了说下邮箱授权操作:在开启服务协议的时候需要发送短信,发送短信后在弹出框中选择已发送就会提示授权码。“保留授权码”
 

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

西河刘卡车医

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表