我正在尝试使用spring boot发送电子邮件。我有3个文件如下
MailSender.java
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessageHelper;
import javax.mail.MessagingException;
import javax.mail.internet.MimeMessage;
public class MailSender
{
@Autowired
private static JavaMailSender mailSender;
public static void main(String[] args)
{
sendemail();
}
public static void sendemail() {
MimeMessage mail = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mail, true);
helper.setTo("emailsendertester24@gmail.com");
//helper.setReplyTo("someone@localhost");
helper.setFrom("emailsendertester24@gmail.com");
helper.setSubject("Lorem ipsum");
helper.setText("Lorem ipsum dolor sit amet [...]");
} catch (MessagingException e) {
e.printStackTrace();
} finally {}
mailSender.send(mail);
//return helper;
}
}
的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>Example</groupId>
<artifactId>SendingEmail</artifactId>
<version>1.0-SNAPSHOT</version>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.3.2.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
<dependency>
<groupId>javax.mail</groupId>
<artifactId>mail</artifactId>
<version>1.4.5</version>
</dependency>
</dependencies>
</project>
和 application.properties
spring.mail.host=smtp.gmail.com
spring.mail.username=*****
spring.mail.password=*****
spring.mail.properties.mail.smtp.auth = true
spring.mail.properties.mail.smtp.socketFactory.port = 25
spring.mail.properties.mail.smtp.socketFactory.class = javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.socketFactory.fallback = false
spring.mail.properties.mail.smtp.ssl.enable=true
所以现在当我尝试运行我的MailSender类时,它给我一个错误“线程中的异常”主“java.lang.NullPointerException”在行 MimeMessage mail = mailSender.createMimeMessage(); 我知道mailSender属性为null,因为它无法从application.properties文件中获取属性。
答案 0 :(得分:4)
您可以选择在Spring-Boot-Email-Tools项目中提供开箱即用的解决方案。
它还提供了有用的功能,如调度,模板引擎支持和REDIS持久性。
如果您需要发送纯文本电子邮件,则只需导入核心模块
<dependency>
<groupId>it.ozimov</groupId>
<artifactId>spring-boot-email-core</artifactId>
<version>0.5.0</version>
</dependency>
按如下方式注释主要内容:
package com.myapplication;
@SpringBootApplication
@EnableEmailTools
public class MainApplication {
public static void main(final String... args) {
}
}
在application.yml
(o properties
)中提供配置,并在组件类中自动装配EmailService
,例如
@Autowired
public EmailService emailService;
public void sendEmailWithoutTemplating(){
final Email email = EmailImpl.builder()
.from(new InternetAddress("cicero@mala-tempora.currunt", "Marco Tullio Cicerone "))
.to(Lists.newArrayList(new InternetAddress("titus@de-rerum.natura", "Pomponius Attĭcus")))
.subject("Laelius de amicitia")
.body("Firmamentum autem stabilitatis constantiaeque eius, quam in amicitia quaerimus, fides est.")
.encoding(Charset.forName("UTF-8")).build();
emailService.send(email);
}
可以在项目的GitHub存储库中找到更多示例。另外,LinkedIn上有this article。
答案 1 :(得分:2)
出现此问题导致您在此块中使用未正确终止的递归:
public static void send() {
SimpleMailMessage message = new SimpleMailMessage();
message.setFrom("abc@gmail.com");
message.setTo("xyz@gmail.com");
message.setSubject("hello");
mailSender.send();
}
您调用自己引用的mailSender.send()方法。在方法内更改你的电话。
答案 2 :(得分:0)
尝试这样的事情:
@SpringBootApplication
public class MyMailSender {
@Bean
public SenderService senderService() {
return new SenderService();
}
public static void main(String[] args) {
SpringApplication.run(MyMailSender.class, args);
}
}
public class SenderService {
@Autowired
private JavaMailSender mailSender;
@PostConstruct
public void send() {
MimeMessage mail = mailSender.createMimeMessage();
try {
MimeMessageHelper helper = new MimeMessageHelper(mail, true);
helper.setTo("emailsendertester24@gmail.com");
//helper.setReplyTo("someone@localhost");
helper.setFrom("emailsendertester24@gmail.com");
helper.setSubject("Lorem ipsum");
helper.setText("Lorem ipsum dolor sit amet [...]");
} catch (MessagingException e) {
e.printStackTrace();
} finally {}
mailSender.send(mail);
//return helper;
}
}