7

我正在将 JavaMail 与 Spring FW 一起使用。一切都很好,但我不知道为什么 FROM 地址总是错误的;它似乎忽略了它,而是说它真正来自哪里。我想要的东西会在一瞬间变得清晰。首先,这是我的代码:

配置

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
    <property name="host" value="smtp.gmail.com"/>
    <property name="port" value="25"/>
    <property name="username" value="[my gmail address]"/>
    <property name="password" value="[my password]"/>
    <property name="javaMailProperties">
        <props>
            <prop key="mail.transport.protocol">smtp</prop>
            <prop key="mail.smtp.auth">true</prop>
            <prop key="mail.smtp.starttls.enable">true</prop>
            <!--<prop key="mail.debug">true</prop>-->
        </props>
    </property>
</bean>

帮手班

@Service("mailService")
public class MailService {

    @Autowired
    private JavaMailSenderImpl mailSender;

    public void sendMail(String from, String to, String subject, String body) {
        try {
            MimeMessage message = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(message, true);
            helper.setFrom(from);
            helper.setTo(to);
            helper.setSubject(subject);
            helper.setText(body, true);
            mailSender.send(message);
        }
        catch (MessagingException ex) {
            Logger.getLogger(MailService.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
    //etc...
}

控制器代码片段

mailService.sendMail(
    contactModel.getEmail(), //From
    Constants.DefaultEmailAddress, //To
    "Enquiry from site", "Phone: " + contactModel.getPhone() + "<br />Message: <br />" + contactModel.getMessage());

基本上,contactModel它是一个普通的 Java 类,具有一些属性,用于在联系我们表单上从用户那里收集信息。当我发送电子邮件时,我目前看到的 FROM 地址与 TO 地址相同。我不知道我是否需要对配置进行一些更改,或者 Gmail 是否可能不允许我这样做。想法,有人吗?

4

4 回答 4

8

Google 不允许您从您的帐户发送邮件,说您不是您(其他域)。

因此,它将使用您授权的帐户覆盖发件人,并保存您在X-google-original-from标题中指定的内容。您必须按照https://support.google.com/mail/answer/22370?hl=en中的指定添加您的外部帐户(或者如果您有 Google Apps,则添加您的外部域以在 Google 中进行管理)。

于 2014-12-11T10:02:54.647 回答
8

要使用将“setFrom”更改为另一个电子邮件地址的 gmail 帐户,您必须执行以下操作:

  1. 将新地址添加到您的 gmail 帐户。说明在这里:https ://support.google.com/mail/answer/22370?hl=en
  2. 设置“始终从不同地址发送”。说明在同一链接下。
  3. 在 gmail 帐户设置/帐户和导入/发送邮件中,将您的新电子邮件地址设置为默认值。
  4. 在 AppConfig.java 中键入:

    @Bean
    public JavaMailSender javaMailSender() {
    JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
    mailSender.setHost("smtp.gmail.com");
    mailSender.setPort(587);
    mailSender.setUsername("address@gmail.com");
    mailSender.setPassword(your gmail's password);
    mailSender.getJavaMailProperties().setProperty("mail.smtp.auth", "true");
    mailSender.getJavaMailProperties().setProperty("mail.smtp.starttls.enable", "true");
    return mailSender;
    

    }

  5. 在 EmailServiceImplementation.java 中输入:

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.mail.SimpleMailMessage;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.stereotype.Service;
    
    @Service       
    public class EmailServiceImpl implements EmailService {
    @Autowired
    private JavaMailSender mailSender;
    @Override
    public void sendEmail(String fromAddress, String toAddress, String subject, String body) {
    SimpleMailMessage mailMessage = new SimpleMailMessage();
    
    mailMessage.setTo(toAddress);
    mailMessage.setFrom("emailWhichYouWishToShow@gmail.com");
    mailMessage.setSubject(subject);
    mailMessage.setText(body);
    
    mailSender.send(mailMessage);
    }
    }
    
于 2017-04-03T07:56:16.473 回答
0

我不确定为什么没有设置您的收件人地址,我会放置一个日志语句来查看传递给 sendMail 方法的内容。

在您的课程中,您应该使用 MailSender 而不是 MailSenderImpl,因为 MailSender 是您要使用的接口。在我的应用程序中,我使用 SimpleMailMessage 而不是 MimeMessage,这对我有用,下面是我过去使用的代码片段。

@Autowired
private MailSender mailSender;

// Email is my own Pojo with from, to, subject and body properties.
@Transactional(propagation = Propagation.REQUIRES_NEW)
    public void sendEmail(Email email)
    {
            // create email message
            SimpleMailMessage msg = new SimpleMailMessage();
            msg.setFrom(email.getFromAddress());
            msg.setTo(email.getToAddress());
            msg.setSubject(email.getSubject());
            msg.setText(email.getBody());

            // send the message using spring mail sender
            this.mailSender.send(msg);
    }
于 2012-12-19T06:24:49.070 回答
0

我知道这个问题很老,但请考虑按照 Google 的说明进行操作

您可以使用 SMTP 或 SSL 连接到 Google Apps 邮件服务器。如果您使用 SMTP 连接,则只能向 Gmail 或 Google Apps 用户发送邮件;如果您使用 SSL 连接,您可以向任何人发送邮件。

如果您的设备或应用程序支持 SSL,请在端口 465 或 587 上连接到 smtp.gmail.com。

并且您正在使用端口 25。

于 2013-09-21T12:48:12.593 回答