使用SpringBoot怎么发送邮件

这篇文章将为大家详细讲解有关使用Spring Boot怎么发送邮件,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。

创新互联建站主要从事成都网站设计、网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务金台,10多年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:18980820575

项目依赖:


 4.0.0
 SendMail
 SendMail
 0.0.1-SNAPSHOT
 jar
 
 
 org.springframework.boot
 spring-boot-starter-parent
 1.4.3.RELEASE
 
 
 
 
  org.springframework.boot
  spring-boot-starter-web
 
 
  org.springframework.boot
  spring-boot-starter-mail
 
 
 
 
 
 
 UTF-8
 1.8
 
 
 
 
  
  org.springframework.boot
  spring-boot-maven-plugin
  
 
 

添加好依赖后项目名右键,java EE Tools > Generat Deployment  Descriptor Stub ,然后Maven > Update Project 。
在src/main/resources目录下手动添加application.properties文件,可以把邮箱的用户名、密码写到这里,此处我只配置了项目的端口号,

server.port=10000。项目结构:

使用Spring Boot怎么发送邮件

接下来就写代码,首先是程序启动的代码:

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
 
@SpringBootApplication
@EnableAutoConfiguration
public class SendMailApplication {
 
 
 public static void main(String[] args) { 
    SpringApplication.run(SendMailApplication.class, args); 
  } 
}

接口层的代码:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;
 
import com.domain.Message;
import com.service.MailService; 
 
@RestController 
@RequestMapping(value="/main")
public class Mail {
 @Autowired 
  JavaMailSender mailSender; 
 
 @RequestMapping(value="/sendemail/{roadName}/{recordTime}/{truckName}",method = RequestMethod.GET )
 
   public void sendEmail(@PathVariable(value = "roadName",required = true) String roadName,
    @PathVariable(value = "recordTime",required = true) String recordTime,
    @PathVariable(value = "truckName",required = true) String truckName) 
   { 
     try 
     { 
     Message msg = new Message(roadName,recordTime,truckName);
     MailService.send(msg);
     
/*       final MimeMessage mimeMessage = this.mailSender.createMimeMessage(); 
//       final MimeMessageHelper message = new MimeMessageHelper(mimeMessage); 
//       message.setFrom("*********@163.com "); 
//       message.setTo("*******@qq.com"); 
//       message.setSubject("测试邮件主题"); 
//       message.setText("测试邮件内容"); 
//       this.mailSender.send(mimeMessage); 
     
*/        
      
     } 
     catch(Exception ex) 
     { 
      
     } 
   }

注销掉的部分为Springboot的邮件发送到的写法,我没用,接下来是我用到的写法。service层,这一段直接拷贝,谢谢那位大哥,搞得这么详细:

import java.util.Date;
import java.util.Properties;
 
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
 
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
 
import com.domain.Message;
 
@Service
public class MailService {
 
 // 发件人的 邮箱 和 密码(替换为自己的邮箱和密码)
  // PS: 某些邮箱服务器为了增加邮箱本身密码的安全性,给 SMTP 客户端设置了独立密码(有的邮箱称为“授权码”), 
  //   对于开启了独立密码的邮箱, 这里的邮箱密码必需使用这个独立密码(授权码)。
 @Value("${spring.mail.username}")
  public static String myEmailAccount = "****@163.com";
 //  
 @Value("${spring.mail.password}")
  public static String myEmailPassword = "********";
 
  // 发件人邮箱的 SMTP 服务器地址, 必须准确, 不同邮件服务器地址不同, 一般(只是一般, 绝非绝对)格式为: smtp.xxx.com
  // 网易163邮箱的 SMTP 服务器地址为: smtp.163.com
  public static String myEmailSMTPHost = "smtp.163.com";
 
  // 收件人邮箱(替换为自己知道的有效邮箱)
  public static String receiveMailAccount = "*****@126.com";
 
  public static void send(Message msg) throws Exception {
    // 1. 创建参数配置, 用于连接邮件服务器的参数配置
    Properties props = new Properties();          // 参数配置
    props.setProperty("mail.transport.protocol", "smtp");  // 使用的协议(JavaMail规范要求)
    props.setProperty("mail.smtp.host", myEmailSMTPHost);  // 发件人的邮箱的 SMTP 服务器地址
    props.setProperty("mail.smtp.auth", "true");      // 需要请求认证
 
    // PS: 某些邮箱服务器要求 SMTP 连接需要使用 SSL 安全认证 (为了提高安全性, 邮箱支持SSL连接, 也可以自己开启),
    //   如果无法连接邮件服务器, 仔细查看控制台打印的 log, 如果有有类似 “连接失败, 要求 SSL 安全连接” 等错误,
    //   打开下面 /* ... */ 之间的注释代码, 开启 SSL 安全连接。
    /*
    // SMTP 服务器的端口 (非 SSL 连接的端口一般默认为 25, 可以不添加, 如果开启了 SSL 连接,
    //         需要改为对应邮箱的 SMTP 服务器的端口, 具体可查看对应邮箱服务的帮助,
    //         QQ邮箱的SMTP(SLL)端口为465或587, 其他邮箱自行去查看)
    final String smtpPort = "465";
    props.setProperty("mail.smtp.port", smtpPort);
    props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
    props.setProperty("mail.smtp.socketFactory.fallback", "false");
    props.setProperty("mail.smtp.socketFactory.port", smtpPort);
    */
 
    // 2. 根据配置创建会话对象, 用于和邮件服务器交互
    Session session = Session.getInstance(props);
    session.setDebug(true);                 // 设置为debug模式, 可以查看详细的发送 log
 
    // 3. 创建一封邮件
    MimeMessage message = createMimeMessage(session, myEmailAccount, receiveMailAccount,msg);
 
    // 4. 根据 Session 获取邮件传输对象
    Transport transport = session.getTransport();
 
    // 5. 使用 邮箱账号 和 密码 连接邮件服务器, 这里认证的邮箱必须与 message 中的发件人邮箱一致, 否则报错
    // 
    //  PS_01: 成败的判断关键在此一句, 如果连接服务器失败, 都会在控制台输出相应失败原因的 log,
    //      仔细查看失败原因, 有些邮箱服务器会返回错误码或查看错误类型的链接, 根据给出的错误
    //      类型到对应邮件服务器的帮助网站上查看具体失败原因。
    //
    //  PS_02: 连接失败的原因通常为以下几点, 仔细检查代码:
    //      (1) 邮箱没有开启 SMTP 服务;
    //      (2) 邮箱密码错误, 例如某些邮箱开启了独立密码;
    //      (3) 邮箱服务器要求必须要使用 SSL 安全连接;
    //      (4) 请求过于频繁或其他原因, 被邮件服务器拒绝服务;
    //      (5) 如果以上几点都确定无误, 到邮件服务器网站查找帮助。
    //
    //  PS_03: 仔细看log, 认真看log, 看懂log, 错误原因都在log已说明。
    transport.connect(myEmailAccount, myEmailPassword);
 
    // 6. 发送邮件, 发到所有的收件地址, message.getAllRecipients() 获取到的是在创建邮件对象时添加的所有收件人, 抄送人, 密送人
    transport.sendMessage(message, message.getAllRecipients());
 
    // 7. 关闭连接
    transport.close();
  }
 
  /**
   * 创建一封只包含文本的简单邮件
   *
   * @param session 和服务器交互的会话
   * @param sendMail 发件人邮箱
   * @param receiveMail 收件人邮箱
   * @return
   * @throws Exception
   */
  public static MimeMessage createMimeMessage(Session session, String sendMail, String receiveMail,Message msg) throws Exception {
    // 1. 创建一封邮件
    MimeMessage message = new MimeMessage(session);
 
    // 2. From: 发件人(昵称有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改昵称)
    message.setFrom(new InternetAddress(sendMail, "*******", "UTF-8"));
 
    // 3. To: 收件人(可以增加多个收件人、抄送、密送)
    message.setRecipient(MimeMessage.RecipientType.TO, new InternetAddress(receiveMail, "Dear", "UTF-8"));
 
    // 4. Subject: 邮件主题(标题有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改标题)
    message.setSubject("问号箱信息 \n时间: "+new Date(), "UTF-8");
 
    // 5. Content: 邮件正文(可以使用html标签)(内容有广告嫌疑,避免被邮件服务器误认为是滥发广告以至返回失败,请修改发送内容)
    message.setContent("时间:"+msg.getRecordTime()+" 车号:"+msg.getTruckName()+" 道口:"+msg.getRoadName(), "text/html;charset=UTF-8");
 
    // 6. 设置发件时间
    message.setSentDate(new Date());
 
    // 7. 保存设置
    message.saveChanges();
 
    return message;
  }

前端主要是ajax调用接口,代码不发了,另外还有一个实体类Message。好,右键项目Run As > Maven install 打包

使用Spring Boot怎么发送邮件

关于使用Spring Boot怎么发送邮件就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。


分享名称:使用SpringBoot怎么发送邮件
文章路径:http://scyanting.com/article/pcejps.html