我正在使用Spring FW的JavaMail。一切都很好,但我不知道为什么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>
HELPER CLASS
@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...
}
控制器代码SNIPPET
mailService.sendMail(
contactModel.getEmail(), //From
Constants.DefaultEmailAddress, //To
"Enquiry from site", "Phone: " + contactModel.getPhone() + "<br />Message: <br />" + contactModel.getMessage());
基本上,contactModel
是一个普通的Java类,有一些属性可以在联系我们表单上收集用户的信息。当我发送电子邮件时,我目前看到的FROM地址与TO地址相同。我无法弄清楚的是我是否需要在配置中进行一些更改,或者Gmail是否可能不允许我这样做。思绪,有人吗?
答案 0 :(得分:5)
Google不允许您从您的帐户发送邮件,说明您不是其他人(其他域名)。
因此,它将使用您授权的帐户覆盖发件人,并保存您在X-google-original-from
标题中指定的内容。您必须按照https://support.google.com/mail/answer/22370?hl=en中的说明添加外部帐户(如果您有Google Apps,则添加外部域名以在Google中管理)。
答案 1 :(得分:4)
使用已更改的&#34; setFrom&#34;到你需要做的另一个电子邮件地址:
在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;
}
在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);
}
}
答案 2 :(得分: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);
}
答案 3 :(得分:0)
我知道这个问题很旧,但请考虑按照Google的说明进行操作
您可以使用SMTP或SSL连接到Google Apps邮件服务器。如果您使用SMTP进行连接,则只能向Gmail或Google Apps用户发送邮件;如果您使用SSL连接,您可以向任何人发送邮件。
如果您的设备或应用程序支持SSL,请在端口465或587上连接到smtp.gmail.com。
您正在使用端口25。