首页 > 解决方案 > Spring/Java Mail:发件人始终是 spring.mail.username。FROM 地址被忽略

问题描述

我使用SimpleMailMessage. 一切运行良好。但我不知道为什么在接收方显示spring.mail.username's地址而不是发件人地址。每封邮件都发送到正确的地址,但来自在属性 spring.mail.username 中创建的地址邮件将使用什么方法?类中有没有可用的方法SimpleMailMessage

resources/application.properties

spring.mail.host = smtp.gmail.com
spring.mail.port=587
spring.mail.username = ***@otherdomain
spring.mail.password = ***
spring.mail.properties.mail.smtp.auth = true
spring.mail.properties.mail.smtp.starttls.enable=true 

代码

private JavaMailSender javaMailSender;

public EmailService(JavaMailSender javaMailSender) {
    this.javaMailSender = javaMailSender;
}

public void sendMail(String fromEmail,String toEmail, String subject, String message) {

    var mailMessage = new SimpleMailMessage();
    mailMessage.setFrom(fromEmail);

    mailMessage.setTo(toEmail);
    mailMessage.setSubject(subject);
    mailMessage.setText(message);


    javaMailSender.send(mailMessage);
}

标签: spring-boot

解决方案


无法更改FROM EMAIL地址,因为它hard coded: spring.mail.username = ***@otherdomain位于resources/application.properties.

但是您使用MimeMessagePreparator

try {
   MimeMessagePreparator preparator = (mimeMessage) -> {
        MimeMessageHelper helper = new MimeMessageHelper(mimeMessage, true);
        helper.setFrom(new InternetAddress("no-reply@gmail.com", "JACK SPARROW"));
        helper.setTo("example@gmail.com");
        helper.setSubject("Sample email");
        helper.setText("Message from ....", true);
    };          
    javaMailSender.send(preparator);
  } catch (MailException exception) {
    throw exception;
}

推荐阅读