私のWebアプリケーションでは、メールを送信します。 Spring MVCでこれを行う方法はありますか?そしてそれをする最善の方法は何ですか?Springを使用してWebアプリケーションからメールを送信する
は
私のWebアプリケーションでは、メールを送信します。 Spring MVCでこれを行う方法はありますか?そしてそれをする最善の方法は何ですか?Springを使用してWebアプリケーションからメールを送信する
は
あなたは簡単に電子メールを送信するためにSpringのメール抽象化レイヤを使用することができます。 mypackage.MySendMailService
で、あなたのapplicationContext.xmlを次に
<!-- Mail sender bean -->
<bean id="mailSender"
class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="my.smtp.host" />
<property name="username" value="my_username" />
<property name="password" value="my_password" />
</bean>
<!-- Simple mail template -->
<bean id="basicEmailMessage"
class="org.springframework.mail.SimpleMailMessage">
<property name="from">
<value>whateverSenderAddress</value>
</property>
</bean>
<!-- Your service with sender and template injected -->
<bean id="mySendMailService"
class="mypackage.MySendMailService">
<property name="mailSender">
<ref bean="mailSender" />
</property>
<property name="emailTemplate">
<ref bean="basicEmailMessage" />
</property>
</bean>
で次のBeanを定義します。
public class SendMailService {
private MailSender mailSender;
private SimpleMailMessage emailTemplate;
public void sendEmail(String to, String from, String subject, String body)
throws MailException {
SimpleMailMessage message = new SimpleMailMessage(this.emailTemplate);
message.setTo(to);
message.setFrom(from);
message.setSubject(subject);
message.setText(body);
mailSender.send(message);
}
public void setMailSender(MailSender mailSender) {
this.mailSender = mailSender;
}
public void setEmailTemplate(SimpleMailMessage emailTemplate) {
this.emailTemplate = emailTemplate;
}
}
ありがとうそれは私が探しているものです – Khalifa
Spring MVCは、Webフレームワークであり、それは、電子メールとは何の関係もありません、ありがとうございました。 Springフレームワークのもう一つの部分はメールの送信をサポートしています。 chapter 24 of the ref guideをご覧ください。
私はApache Velocityを電子メールのテンプレートシステムとして使用しています。 "VelocityEngine"のインスタンスをSpring Beanとして定義し、それをコントローラに注入することができます。しかし、よりクリーンなソリューションは、メール送信コードをサービスに入れて、あなたのサービスをあなたのコントローラに注入することです。
@Autowired private VelocityEngine velocityEngine;
@Autowired private JavaMailSender mailSender;
MimeMessagePreparator preparator = new MimeMessagePreparator() {
@Override
public void prepare(MimeMessage mimeMessage) throws Exception {
MimeMessageHelper message = new MimeMessageHelper(mimeMessage);
message.setTo("[email protected]");
message.setFrom("[email protected]");
message.setSubject("You got mail!");
Map<String, Object> model = new HashMap<String, Object>();
model.put("param1", new Date());
String text =
VelocityEngineUtils.mergeTemplateIntoString(
velocityEngine,
"com/myapp/mailtemplates/email.vm",
model
);
mimeMessage.setText(text,"utf-8", "html");
mimeMessage.setHeader("Content-Type", "text/html; charset=utf-8");
}
};
mailSender.send(preparator);
HashMapを使用して、ベロシティテンプレート内で使用できるパラメータを渡すことができます。 次に、 "JavaMailSender"を使用して電子メールを送信できます。このJavaMailSenderは、Spring Beanとして定義することもできます。
あなたはMailSenderのとこれに似velocityEngine Beanを定義することができます。
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="host" value="smtp.mail.com" />
<property name="username" value="sender" />
<property name="password" value="password" />
<property name="javaMailProperties">
<props>
<!-- Use SMTP-AUTH to authenticate to SMTP server -->
<prop key="mail.smtp.auth">true</prop>
<!-- Use TLS to encrypt communication with SMTP server -->
<!-- <prop key="mail.smtp.starttls.enable">true</prop> -->
</props>
</property>
</bean>
<!-- Apache Velocity Email Template Engine -->
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="velocityProperties">
<value>
resource.loader=class
class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
</value>
</property>
</bean>
だから、問題は何ですか?方法があると確信しています。調査に時間を費やす。 – mre