Отправка писем из веб-приложения с помощью Spring - PullRequest
2 голосов
/ 18 октября 2011

В моем веб-приложении я хочу отправлять письма.Есть ли способ сделать это с помощью Spring MVC?И какой лучший способ сделать это?

Спасибо

Ответы [ 3 ]

5 голосов
/ 18 октября 2011

Вы можете использовать слой абстракции почты Spring, чтобы легко отправлять электронные письма. Определите следующие bean-компоненты в вашем 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>

Затем в mypackage.MySendMailService:

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;
    }
}
3 голосов
/ 18 октября 2011

Я использую Apache Velocity в качестве системы шаблонов электронной почты. Вы можете определить экземпляр VelocityEngine как пружинный компонент и внедрить его в свои контроллеры. Однако гораздо более чистое решение заключается в том, чтобы поместить код отправки почты в службу и внедрить вашу службу в ваш контроллер.

 @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("customer@mail.com");
                        message.setFrom("noreply@mail.com");
                        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», который также можно определить как пружинный компонент.

Вы можете определить bean-компоненты mailSender и speedEngine следующим образом:

    <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>
1 голос
/ 18 октября 2011

Spring MVC - это веб-фреймворк, и он не имеет ничего общего с электронной почтой. Другая часть Spring Framework поддерживает отправку почты. Взгляните на главу 24 справочного руководства .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...