Spring Boot 发送电子邮件

通过使用 Spring Boot RESTful Web 服务,我们可以使用 Gmail 传输层安全性发送电子邮件。 在本章中,让我们详细了解如何使用此功能。

首先,我们需要在构建配置文件中添加 Spring Boot Starter Mail 依赖项。

Maven 用户可以将以下依赖项添加到 pom.xml 文件中。

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-mail</artifactId>
</dependency>

Gradle 用户可以在 build.gradle 文件中添加以下依赖项。

compile('org.springframework.boot:spring-boot-starter-mail')

主要 Spring Boot 应用程序类文件的代码如下

package com.jiyik.emailapp;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author jiyik.com
 */
@SpringBootApplication
public class EmailappApplication {
    public static void main(String[] args) {
        SpringApplication.run(EmailappApplication.class, args);
    }
}

我们可以编写一个简单的 Rest API 以发送到 Rest Controller 类文件中的电子邮件,如下所示。

package com.jiyik.controller;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class EmailController {
    @RequestMapping(value = "/sendemail")
    public String sendEmail() {
        return "Email sent successfully";
    }
}

我们可以编写一个方法来发送带有附件的电子邮件。 定义 mail.smtp 属性并使用 PasswordAuthentication

private void sendmail() throws AddressException, MessagingException, IOException {
   Properties props = new Properties();
   props.put("mail.smtp.auth", "true");
   props.put("mail.smtp.starttls.enable", "true");
   props.put("mail.smtp.host", "smtp.gmail.com");
   props.put("mail.smtp.port", "587");
   
   Session session = Session.getInstance(props, new javax.mail.Authenticator() {
      protected PasswordAuthentication getPasswordAuthentication() {
         return new PasswordAuthentication("tutorialspoint@gmail.com", "<your password>");
      }
   });
   Message msg = new MimeMessage(session);
   msg.setFrom(new InternetAddress("tutorialspoint@gmail.com", false));

   msg.setRecipients(Message.RecipientType.TO, InternetAddress.parse("tutorialspoint@gmail.com"));
   msg.setSubject("Tutorials point email");
   msg.setContent("Tutorials point email", "text/html");
   msg.setSentDate(new Date());

   MimeBodyPart messageBodyPart = new MimeBodyPart();
   messageBodyPart.setContent("Tutorials point email", "text/html");

   Multipart multipart = new MimeMultipart();
   multipart.addBodyPart(messageBodyPart);
   MimeBodyPart attachPart = new MimeBodyPart();

   attachPart.attachFile("/var/tmp/image19.png");
   multipart.addBodyPart(attachPart);
   msg.setContent(multipart);
   Transport.send(msg);   
}

现在,从 Rest API 调用上面的 sendmail() 方法,如图所示

@RequestMapping(value = "/sendemail")
public String sendEmail() throws AddressException, MessagingException, IOException {
   sendmail();
   return "Email sent successfully";   
}

注意 - 请在发送电子邮件之前在 Gmail 帐户设置中打开允许不太安全的应用程序。

查看笔记

扫码一下
查看教程更方便