首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >邮件发件人异常(使用mailtrap.io)

邮件发件人异常(使用mailtrap.io)
EN

Stack Overflow用户
提问于 2020-09-18 22:34:18
回答 1查看 617关注 0票数 0

我正在尝试实现邮件发送功能(就目前而言,我使用的是一些假smtp),但我一直收到以下错误:

代码语言:javascript
复制
    2020-09-19 00:20:38.209 DEBUG 880 --- [nio-8080-exec-5] o.s.web.servlet.DispatcherServlet        : Failed to complete request: org.springframework.mail.MailSendException: Failed messages: javax.mail.SendFailedException: No recipient addresses; message exceptions (1) are:
Failed message 1: javax.mail.SendFailedException: No recipient addresses
2020-09-19 00:20:38.217 ERROR 880 --- [nio-8080-exec-5] o.a.c.c.C.[.[.[/].[dispatcherServlet]    : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.mail.MailSendException: Failed messages: javax.mail.SendFailedException: No recipient addresses; message exceptions (1) are:
Failed message 1: javax.mail.SendFailedException: No recipient addresses] with root cause

org.springframework.mail.MailSendException: Failed messages: javax.mail.SendFailedException: No recipient addresses
    at org.springframework.mail.javamail.JavaMailSenderImpl.doSend(JavaMailSenderImpl.java:491) ~[spring-context-support-5.2.2.RELEASE.jar:5.2.2.RELEASE]
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:361) ~[spring-context-support-5.2.2.RELEASE.jar:5.2.2.RELEASE]
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:378) ~[spring-context-support-5.2.2.RELEASE.jar:5.2.2.RELEASE]
    at org.springframework.mail.javamail.JavaMailSenderImpl.send(JavaMailSenderImpl.java:366) ~[spring-context-support-5.2.2.RELEASE.jar:5.2.2.RELEASE]
    at com.socialnetwork.service.EmailService.sendEmail(EmailService.java:26) ~[classes/:na]
    at com.socialnetwork.service.EmailService.sendVerificationEmail(EmailService.java:49) ~[classes/:na]
    at com.socialnetwork.controllers.AuthController.register(AuthController.java:50) ~[classes/:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
    at java.base/java.lang.reflect.Method.invoke(Method.java:567) ~[na:na]

我的代码:

application.properties:

代码语言:javascript
复制
mail.enable=true
mail.smtp.host=smtp.mailtrap.io
mail.smtp.port=2525
mail.smtp.user=2be3af3d5134be
mail.smtp.pass=2c9ac24fa0808e

MailConfig.java

代码语言:javascript
复制
@Configuration
public class MailConfig {
    
    @Value("${mail.smtp.host}")
    private String host;
    
    @Value("${mail.smtp.port}")
    private Integer port;
    
    @Value("${mail.smtp.user}")
    private String username;
    
    @Value("${mail.smtp.pass}")
    private String password;
    
    @Bean
    public JavaMailSender mailSender() {
        
        JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
        
        mailSender.setHost(host);
        mailSender.setPort(port);
        mailSender.setUsername(username);
        mailSender.setPassword(password);
        
        return mailSender;
    }
    
}

一切都从这里开始:

代码语言:javascript
复制
@RequestMapping(value = "/register", method=RequestMethod.POST)
ModelAndView register(ModelAndView modelAndView, @ModelAttribute(value="user") @Valid SiteUser user, BindingResult result) {
    
    modelAndView.setViewName("app.register");
    
    if(!result.hasErrors()) {
        userService.register(user);
        
        emailService.sendVerificationEmail(user.getEmail()); // STEP 1
        
        modelAndView.setViewName("redirect:/");
    }
    
    return modelAndView;
}   

EmailService.java

代码语言:javascript
复制
@Service
public class EmailService {
    
    @Autowired
    private JavaMailSender mailSender;
    
    @Value("${mail.enable}")
    private Boolean isMailEnabled;
    
    private void sendEmail(MimeMessagePreparator preparator) {
        if(isMailEnabled) {
            mailSender.send(preparator); // STEP 2
        }
    }
    
    public void sendVerificationEmail(String emailAddress) {
        
        MimeMessagePreparator preparator = new MimeMessagePreparator() {

            @Override
            public void prepare(MimeMessage mimeMessage) throws Exception {
                
                MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
                
                message.setReplyTo(emailAddress);
                message.setFrom(new InternetAddress("socialnetworkmailsender@yandex.com"));
                message.setSubject("Please Verify Your Email Address");
                message.setSentDate(new Date());
                
                message.setText("Hello there!");
                
            }
        };
        
        sendEmail(preparator);
    }
}

这些是我的类,我在代码中留下了两个注释:

步骤1:我想在用户完成注册后发送验证邮件。我接受他输入的电子邮件,我把这个地址传递给'sendVerificationEmail‘方法。

步骤2:到目前为止,似乎一切正常,但是在这个调用错误出现在我的控制台之后,我不明白为什么。

注意:除了之外,我也尝试使用mailspons,但是我也收到了同样的错误。

你知道我为什么会犯这个错误吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-19 16:05:40

我设法纠正了错误。

问题在'sendVerificationEmail‘方法之内。

而不是使用:

代码语言:javascript
复制
message.setReplyTo(emailAddress);

我需要用:

代码语言:javascript
复制
message.setTo(emailAddress);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63963585

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档