2012-12-19 57 views
2

我在Spring FW上使用JavaMail。一切都很好,但我不知道爲什麼FROM地址總是錯的;它似乎忽略了它,並且說它確實來自哪裏。我想要的會在一瞬間變得更清晰。首先,這裏是我的代碼:Spring/Java Mail:FROM地址被忽略

CONFIG

<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類,有幾個屬性用於收集用戶的信息,聯繫我們窗體。當我發送電子郵件時,我正在看到與TO地址相同的FROM地址。我無法弄清楚的是,我是否需要在配置中進行一些更改,或者Gmail可能不允許我這樣做。想法,任何人?

+1

可能重複:[春季郵件的MimeMessage有不正確的「從「set」(http://stackoverflow.com/a/9140611/1350869) –

+0

謝謝,弗蘭克..就是這樣... Google sc在這個問題上給我留下了烙印。如果你添加該答案,那麼我會接受它 – Matt

+0

可能重複[春天郵件MimeMessage有一個不正確的「發件人」設置](http://stackoverflow.com/questions/9140176/spring-mail-mimemessage-has-一個錯誤從設置) –

回答

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); 
    } 
+0

謝謝,但我需要使用JavaMailSenderImpl,因爲當我只嘗試使用MailSender,然後我無法使用HTML。另外,我調試了代碼,我可以看到正確的地址正在發送到sendEmail()方法並設置在MimeMessage對象上。 – Matt

+0

@Matt然後使用JavaMailSender接口而不是實現。 –

+0

弗蘭克,這很公平,謝謝..但它不能解決我的問題...有人可以告訴我怎麼做我想在這裏做什麼? – Matt

0

我知道這個問題是舊的,但谷歌

考慮以下說明

您可以連接到使用SMTP或SSL谷歌Apps郵件服務器。如果您使用SMTP進行連接,則只能將郵件發送給Gmail或Google Apps用戶;如果您使用SSL連接,則可以將郵件發送給任何人。

如果您的設備或應用程序支持SSL,連接到smtp.gmail.com端口465或587

和你正在使用端口25

4

谷歌將不會讓您發送電子郵件從你的帳戶說你是某人你不(其他域)。

因此它會用您授權的帳戶覆蓋發件人,並保存您在X-google-original-from標題中指定的內容。您必須按照https://support.google.com/mail/answer/22370?hl=en中的規定添加您的外部帳戶(或者,如果您擁有Google Apps,請添加您的外部域以在Google中管理)。

2

使用Gmail帳戶改變「setFrom」到另一個電子郵件地址,您需要做的:

  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("[email protected]"); 
    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("[email protected]"); 
    mailMessage.setSubject(subject); 
    mailMessage.setText(body); 
    
    mailSender.send(mailMessage); 
    } 
    }