シナリオ: ユーザーは、自分の電子メール アドレスを使用して連絡フォームを送信します。私が受け取る電子メールは、連絡先フォームに記入した電子メールの「送信元」である必要があります。代わりに取得するのは、Spring コンテキストで構成した gmail (foo@gmail.com) アカウントですが、setFromは次のようにコードで適切に設定されています。
public void sendContactNotification(final ContactForm contactForm) {
MimeMessagePreparator preparator = new MimeMessagePreparator() {
@SuppressWarnings({ "rawtypes", "unchecked" })
public void prepare(MimeMessage mimeMessage) throws Exception {
MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
message.setTo(contact@foo.com);
message.setFrom(contactForm.getEmail());
message.setSubject("New contact message " + contactForm.getTopic());
message.setReplyTo(contactForm.getEmail());
message.setSentDate(new Date());
Map model = new HashMap();
model.put("newMessage", contactForm);
String text = VelocityEngineUtils.mergeTemplateIntoString(
velocityEngine, "velocity/new_contact_message.vm", "UTF-8", model);
message.setText(text, true);
}
};
this.mailSender.send(preparator);
}
Spring コンテキストでは、送信者は次のように構成されます。
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.gmail.com" />
<property name="port" value="587" />
<property name="username" value="foo@gmail.com" />
<property name="password" value="password" />
<property name="javaMailProperties">
<props>
<prop key="mail.smtp.auth">true</prop>
<prop key="mail.smtp.starttls.enable">true</prop>
</props>
</property>
ありがとう、エイドリアン