当前位置:   article > 正文

Java发送邮件_java msg.getallrecipients()空指针

java msg.getallrecipients()空指针

1.发送简单文本邮件

1)导入jar包

  1. <dependency>
  2. <groupId>javax.mail</groupId>
  3. <artifactId>javax.mail-api</artifactId>
  4. <version>1.6.2</version>
  5. </dependency>
  6. <dependency>
  7. <groupId>javax.activation</groupId>
  8. <artifactId>activation</artifactId>
  9. <version>1.1.1</version>
  10. </dependency>

2)上代码

  1. package com.test;
  2. import javax.mail.Message;
  3. import javax.mail.MessagingException;
  4. import javax.mail.Session;
  5. import javax.mail.Transport;
  6. import javax.mail.internet.InternetAddress;
  7. import javax.mail.internet.MimeMessage;
  8. import java.util.Properties;
  9. public class SendEmail {
  10. public static void SendEmail(String sendAddress, String title, String content, String copysendAddress) throws MessagingException {
  11. Properties properties = new Properties();
  12. // 设置服务器名称
  13. properties.setProperty("mail.host","smtp.qq.com");
  14. // 设置文件传输协议
  15. properties.setProperty("mail.transport.protocol", "smtp");
  16. // 设置是否要验证服务器用户名和密码
  17. properties.setProperty("mail.smtp.auth", "true");
  18. // 1.创建客户端与邮箱服务器的Session对象
  19. Session session = Session.getInstance(properties);
  20. // 2.开启 session 的 debug 模式,方便查看发送 email 的运行状态
  21. session.setDebug(true);
  22. // 3.通过 session 得到 transport 传输对象
  23. Transport transport = session.getTransport();
  24. // 4.使用用户名、授权码连接上邮箱服务器,此处的授权码需要到邮箱开启服务设置
  25. transport.connect("smtp.qq.com","xxx@qq.com","xxx");// 授权码
  26. // 5.创建邮件
  27. Message message = createSimpleMail(session, sendAddress ,title, content, copysendAddress);
  28. // 6.发送邮件
  29. transport.sendMessage(message, message.getAllRecipients());
  30. transport.close();
  31. }
  32. private static Message createSimpleMail(Session session, String sendAddress, String title, String content, String copysendAddress) throws MessagingException {
  33. // 创建邮件对象
  34. MimeMessage message = new MimeMessage(session);
  35. // 指明邮件的发件人
  36. message.setFrom(new InternetAddress("xxx@qq.com"));
  37. // 指明邮件的收件人
  38. message.setRecipient(Message.RecipientType.TO, new InternetAddress(sendAddress));
  39. // 邮件的标题
  40. message.setSubject(title);
  41. // 邮件的内容
  42. message.setContent(content, "text/html;charset=UTF-8");
  43. // 设置抄送人
  44. message.setRecipients(Message.RecipientType.CC, InternetAddress.parse(copysendAddress));
  45. return message;
  46. }
  47. public static void main(String[] args) throws MessagingException {
  48. SendEmail("xxx@qq.com", "邮件发送演示", "邮件内容", "xxx2@qq.com");
  49. }
  50. }

2.SpringBoot JavaMailSender发送html文本、附件邮件

https://blog.csdn.net/zongmaomx/article/details/105278668

https://blog.csdn.net/qq_31281189/article/details/97760951

2.1 SpringBoot使用JavaMailSender发送普通文本邮件

application.yml配置

  1. # 发送邮件
  2. spring:
  3. mail:
  4. # 邮箱账号
  5. username: xxx@qq.com
  6. # 操作码
  7. password: xxx
  8. host: smtp.qq.com

1)pom.xml配置

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <parent>
  7. <groupId>org.springframework.boot</groupId>
  8. <artifactId>spring-boot-starter-parent</artifactId>
  9. <version>2.4.4</version>
  10. </parent>
  11. <groupId>com.yu</groupId>
  12. <artifactId>spring-test01</artifactId>
  13. <version>1.0-SNAPSHOT</version>
  14. <dependencies>
  15. <dependency>
  16. <groupId>org.springframework.boot</groupId>
  17. <artifactId>spring-boot-starter-web</artifactId>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.springframework.boot</groupId>
  21. <artifactId>spring-boot-starter-test</artifactId>
  22. <scope>test</scope>
  23. </dependency>
  24. <dependency>
  25. <groupId>org.projectlombok</groupId>
  26. <artifactId>lombok</artifactId>
  27. <version>1.18.12</version>
  28. <scope>provided</scope>
  29. </dependency>
  30. <dependency>
  31. <groupId>org.springframework.boot</groupId>
  32. <artifactId>spring-boot-starter-mail</artifactId>
  33. </dependency>
  34. </dependencies>
  35. <build>
  36. <plugins>
  37. <plugin>
  38. <groupId>org.springframework.boot</groupId>
  39. <artifactId>spring-boot-maven-plugin</artifactId>
  40. </plugin>
  41. </plugins>
  42. </build>
  43. </project>

2)model

  1. package com.yu.model;
  2. import lombok.AllArgsConstructor;
  3. import lombok.Data;
  4. import lombok.NoArgsConstructor;
  5. @Data
  6. @AllArgsConstructor
  7. @NoArgsConstructor
  8. public class Email {
  9. private String title;
  10. private String content;
  11. private String to;
  12. }

3)Controller

  1. package com.yu.controller;
  2. import com.yu.model.Email;
  3. import com.yu.service.EmailService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.web.bind.annotation.RequestMapping;
  6. import org.springframework.web.bind.annotation.RestController;
  7. import javax.mail.MessagingException;
  8. @RestController
  9. @RequestMapping("/test")
  10. public class TestController {
  11. @Autowired
  12. private EmailService emailService;
  13. @RequestMapping("sendEmail")
  14. public String sendEmail() throws MessagingException {
  15. Email email = new Email();
  16. email.setTo("xxx@qq.com");
  17. email.setTitle("发邮件测试003");
  18. email.setContent("发邮件测试内容003");
  19. emailService.sendEmail(email);
  20. return "ok";
  21. }
  22. }

4)Service

  1. package com.yu.service;
  2. import com.yu.model.Email;
  3. import javax.mail.MessagingException;
  4. public interface EmailService {
  5. public void sendEmail(Email email) throws MessagingException;
  6. }

5)ServiceImpl

  1. package com.yu.service.impl;
  2. import com.yu.model.Email;
  3. import com.yu.service.EmailService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.mail.javamail.JavaMailSender;
  7. import org.springframework.mail.javamail.MimeMessageHelper;
  8. import org.springframework.stereotype.Service;
  9. import javax.mail.MessagingException;
  10. import javax.mail.internet.MimeMessage;
  11. @Service
  12. public class EmailServiceImpl implements EmailService {
  13. @Autowired
  14. private JavaMailSender javaMailSender;
  15. @Value("${spring.mail.username}")
  16. private String fromEmail;
  17. public void sendEmail(Email email) throws MessagingException {
  18. // 1.创建一个MimeMessage
  19. MimeMessage mimeMessage = javaMailSender.createMimeMessage();
  20. // 2.发送邮件的一个工具类
  21. MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
  22. mimeMessageHelper.setTo(email.getTo());
  23. mimeMessageHelper.setSubject(email.getTitle());
  24. mimeMessageHelper.setText(email.getContent());
  25. mimeMessageHelper.setFrom(fromEmail);
  26. javaMailSender.send(mimeMessage);
  27. }
  28. }

6)单元测试

  1. package com.yu;
  2. import com.yu.model.Email;
  3. import com.yu.service.EmailService;
  4. import org.junit.jupiter.api.Test;
  5. import org.springframework.beans.factory.annotation.Autowired;
  6. import org.springframework.boot.test.context.SpringBootTest;
  7. import javax.mail.MessagingException;
  8. @SpringBootTest
  9. public class sendEmailTest {
  10. // 能正常注册bean
  11. @Autowired
  12. private EmailService emailService;
  13. @Test
  14. public void Test() throws MessagingException {
  15. Email email = new Email();
  16. email.setTo("xxx@qq.com");
  17. email.setTitle("发邮件测试006");
  18. email.setContent("发邮件测试内容006");
  19. emailService.sendEmail(email);
  20. }
  21. }

2.2 .xlsx附件(待完成)

  1. package com.yu.service.impl;
  2. import com.yu.model.Email;
  3. import com.yu.service.EmailService;
  4. import org.springframework.beans.factory.annotation.Autowired;
  5. import org.springframework.beans.factory.annotation.Value;
  6. import org.springframework.mail.javamail.JavaMailSender;
  7. import org.springframework.mail.javamail.MimeMessageHelper;
  8. import org.springframework.stereotype.Service;
  9. import javax.mail.MessagingException;
  10. import javax.mail.internet.MimeMessage;
  11. @Service
  12. public class EmailServiceImpl implements EmailService {
  13. @Autowired
  14. private JavaMailSender javaMailSender;
  15. @Value("${spring.mail.username}")
  16. private String fromEmail;
  17. public void sendEmail(Email email) throws MessagingException {
  18. // 1.创建一个MimeMessage
  19. MimeMessage mimeMessage = javaMailSender.createMimeMessage();
  20. // 2.发送邮件的一个工具类
  21. MimeMessageHelper mimeMessageHelper = new MimeMessageHelper(mimeMessage);
  22. mimeMessageHelper.setTo(email.getTo());
  23. mimeMessageHelper.setSubject(email.getTitle());
  24. mimeMessageHelper.setText(email.getContent(), true);
  25. mimeMessageHelper.setFrom(fromEmail);
  26. MultipartFile multipartFile = createWorkbookAndConvertMultipartFile(email.getTitles(), eamil.getList());
  27. mimeMessageHelper.addAttachment(email.getFileName(), multipartFile);
  28. javaMailSender.send(mimeMessage);
  29. }
  30. /*
  31. * 将数据生成 Workbook 并转成 MultipartFile
  32. *
  33. * @param titles
  34. * @param MultipartFile
  35. */
  36. public MultipartFile createWorkbookAndConvertMultipartFile(String titles[], List<String> list) {
  37. //簿
  38. Workbook workbook = new SXSSFWorkbook();
  39. //表
  40. Sheet sheet = workbook.createSheet();
  41. // 写title
  42. Row row0 = sheet.createRow(0);
  43. for (int i = 0; i < titles.length; i++) {
  44. Cell cell = row0.createCell(i);
  45. cell.setCellValue(titles[i]);
  46. }
  47. // 写数据(省略)
  48. MultipartFile multipartFile = null;
  49. try {
  50. ByteArrayOutputStream oup = new ByteArrayOutputStream();
  51. workbook.write(oup);
  52. byte[] bytes = oup.toByteArray();
  53. InputStream inputStream = new ByteArrayInputStream(bytes);
  54. multipartFile = new MockMultipartFile("name", "name", "name", inputStream);
  55. oup.close();
  56. inputStream.close();
  57. } catch (IOException e) {
  58. e.printStackTrace();
  59. }
  60. // 清除临时文件
  61. ((SXSSFWorkbook) workbook).dispose();
  62. long end = System.currentTimeMillis();
  63. System.out.println((double) (end - begin) / 1000);
  64. return multipartFile;
  65. }
  66. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/728338
推荐阅读
相关标签
  

闽ICP备14008679号