锘??xml version="1.0" encoding="utf-8" standalone="yes"?>亚洲精品无码久久,亚洲人成黄网在线观看 ,国产成A人亚洲精V品无码http://www.tkk7.com/purecoffee/archive/2005/11/24/21237.html娓呭挅娓呭挅Thu, 24 Nov 2005 02:37:00 GMThttp://www.tkk7.com/purecoffee/archive/2005/11/24/21237.htmlhttp://www.tkk7.com/purecoffee/comments/21237.htmlhttp://www.tkk7.com/purecoffee/archive/2005/11/24/21237.html#Feedback0http://www.tkk7.com/purecoffee/comments/commentRss/21237.htmlhttp://www.tkk7.com/purecoffee/services/trackbacks/21237.html Chapter 21. Sending Email with Spring mail abstraction layer Prev     Next

Chapter 21. Sending Email with Spring mail abstraction layer

21.1. Introduction

Spring provides a higher level of abstraction for sending electronic mail which shields the user from the specifics of underlying mailing system and is responsible for a low level resource handling on behalf of the client.

21.2. Spring mail abstraction structure

The main package of Spring mail abstraction layer is org.springframework.mail package. It contains central interface for sending emails called MailSender and the value object which encapsulates properties of a simple mail such as from, to, cc, subject, text called SimpleMailMessage. This package also contains a hierarchy of checked exceptions which provide a higher level of abstraction over the lower level mail system exceptions with the root exception being MailException.Please refer to JavaDocs for more information on mail exception hierarchy.

Spring also provides a sub-interface of MailSender for specialized JavaMail features such as MIME messages, namely org.springframework.mail.javamail.JavaMailSender It also provides a callback interface for preparation of JavaMail MIME messages, namely org.springframework.mail.javamail.MimeMessagePreparator

MailSender:

public interface MailSender {

    /**
     * Send the given simple mail message.
     * @param simpleMessage message to send
     * @throws MailException in case of message, authentication, or send errors
     */
    public void send(SimpleMailMessage simpleMessage) throws MailException;

    /**
     * Send the given array of simple mail messages in batch.
     * @param simpleMessages messages to send
     * @throws MailException in case of message, authentication, or send errors
     */
    public void send(SimpleMailMessage[] simpleMessages) throws MailException;

}

JavaMailSender:

public interface JavaMailSender extends MailSender {

    /**
     * Create a new JavaMail MimeMessage for the underlying JavaMail Session
     * of this sender. Needs to be called to create MimeMessage instances
     * that can be prepared by the client and passed to send(MimeMessage).
     * @return the new MimeMessage instance
     * @see #send(MimeMessage)
     * @see #send(MimeMessage[])
     */
    public MimeMessage createMimeMessage();

    /**
     * Send the given JavaMail MIME message.
     * The message needs to have been created with createMimeMessage.
     * @param mimeMessage message to send
     * @throws MailException in case of message, authentication, or send errors
     * @see #createMimeMessage
     */
    public void send(MimeMessage mimeMessage) throws MailException;

    /**
     * Send the given array of JavaMail MIME messages in batch.
     * The messages need to have been created with createMimeMessage.
     * @param mimeMessages messages to send
     * @throws MailException in case of message, authentication, or send errors
     * @see #createMimeMessage
     */
    public void send(MimeMessage[] mimeMessages) throws MailException;

    /**
     * Send the JavaMail MIME message prepared by the given MimeMessagePreparator.
     * Alternative way to prepare MimeMessage instances, instead of createMimeMessage
     * and send(MimeMessage) calls. Takes care of proper exception conversion.
     * @param mimeMessagePreparator the preparator to use
     * @throws MailException in case of message, authentication, or send errors
     */
    public void send(MimeMessagePreparator mimeMessagePreparator) throws MailException;

    /**
     * Send the JavaMail MIME messages prepared by the given MimeMessagePreparators.
     * Alternative way to prepare MimeMessage instances, instead of createMimeMessage
     * and send(MimeMessage[]) calls. Takes care of proper exception conversion.
     * @param mimeMessagePreparators the preparator to use
     * @throws MailException in case of message, authentication, or send errors
     */
    public void send(MimeMessagePreparator[] mimeMessagePreparators) throws MailException;

}

MimeMessagePreparator:

public interface MimeMessagePreparator {

    /**
     * Prepare the given new MimeMessage instance.
     * @param mimeMessage the message to prepare
     * @throws MessagingException passing any exceptions thrown by MimeMessage
     * methods through for automatic conversion to the MailException hierarchy
     */
    void prepare(MimeMessage mimeMessage) throws MessagingException;

}

21.3. Using Spring mail abstraction

Let's assume there is a business interface called OrderManager

public interface OrderManager {

    void placeOrder(Order order);
}

and there is a use case that says that an email message with order number would need to be generated and sent to a customer placing that order. So for this purpose we want to use MailSender and SimpleMailMessage

Please note that as usual, we work with interfaces in the business code and let Spring IoC container take care of wiring of all the collaborators for us.

Here is the implementation of OrderManager

import org.springframework.mail.MailException;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;

public class OrderManagerImpl implements OrderManager {

    private MailSender mailSender;
    private SimpleMailMessage message;

    public void setMailSender(MailSender mailSender) {
        this.mailSender = mailSender;
    }

    public void setMessage(SimpleMailMessage message) {
        this.message = message;
    }

    public void placeOrder(Order order) {

        //... * Do the business calculations....
        //... * Call the collaborators to persist the order

        //Create a thread safe "sandbox" of the message
        SimpleMailMessage msg = new SimpleMailMessage(this.message);
        msg.setTo(order.getCustomer().getEmailAddress());
        msg.setText(
            "Dear "
                + order.getCustomer().getFirstName()
                + order.getCustomer().getLastName()
                + ", thank you for placing order. Your order number is "
                + order.getOrderNumber());
        try{
            mailSender.send(msg);
        }
        catch(MailException ex) {
            //log it and go on
            System.err.println(ex.getMessage());            
        }
    }
}

Here is what the bean definitions for the code above would look like:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
  <property name="host"><value>mail.mycompany.com</value></property>
</bean>

<bean id="mailMessage" class="org.springframework.mail.SimpleMailMessage">
  <property name="from"><value>customerservice@mycompany.com</value></property>
  <property name="subject"><value>Your order</value></property>
</bean>

<bean id="orderManager" class="com.mycompany.businessapp.support.OrderManagerImpl">
  <property name="mailSender"><ref bean="mailSender"/></property>
  <property name="message"><ref bean="mailMessage"/></property>
</bean>

Here is the implementation of OrderManager using MimeMessagePreparator callback interface. Please note that the mailSender property is of type JavaMailSender in this case in order to be able to use JavaMail MimeMessage:

import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;

import javax.mail.internet.MimeMessage;
import org.springframework.mail.MailException;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessagePreparator;

public class OrderManagerImpl implements OrderManager {

    private JavaMailSender mailSender;
    
    public void setMailSender(JavaMailSender mailSender) {
        this.mailSender = mailSender;
    }

    public void placeOrder(final Order order) {

        //... * Do the business calculations....
        //... * Call the collaborators to persist the order
        
        MimeMessagePreparator preparator = new MimeMessagePreparator() {
            public void prepare(MimeMessage mimeMessage) throws MessagingException {
                mimeMessage.setRecipient(Message.RecipientType.TO, 
                        new InternetAddress(order.getCustomer().getEmailAddress()));
                mimeMessage.setFrom(new InternetAddress("mail@mycompany.com"));
                mimeMessage.setText(
                    "Dear "
                        + order.getCustomer().getFirstName()
                        + order.getCustomer().getLastName()
                        + ", thank you for placing order. Your order number is "
                        + order.getOrderNumber());
            }
        };
        try{
            mailSender.send(preparator);
        }
        catch (MailException ex) {
            //log it and go on
            System.err.println(ex.getMessage());            
        }
    }
}

If you want to use JavaMail MimeMessage to the full power, the MimeMessagePreparator is available at your fingertips.

Please note that the mail code is a crosscutting concern and is a perfect candidate for refactoring into a custom Spring AOP advice, which then could easily be applied to OrderManager target. Please see the AOP chapter.

21.3.1. Pluggable MailSender implementations

Spring comes with two MailSender implementations out of the box - the JavaMail implementation and the implementation on top of Jason Hunter's MailMessage class that's included in http://servlets.com/cos (com.oreilly.servlet). Please refer to JavaDocs for more information.

21.4. Using the JavaMail MimeMessageHelper

One of the components that comes in pretty handy when dealing with JavaMail messages is the org.springframework.mail.javamail.MimeMessageHelper. It prevents you from having to use the nasty APIs the the javax.mail.internet classes. A couple of possible scenarios:

21.4.1. Creating a simple MimeMessage and sending it

Using the MimeMessageHelper it's pretty easy to setup and send a MimeMessage:

// of course you would setup the mail sender using 
// DI in any real-world cases
JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost("mail.host.com");

MimeMessage message = sender.createMimeMesage();
MimeMessageHelper helper = new MimeMessageHelper(message);
helper.setTo("test@host.com");
helper.setText("Thank you for ordering!");

sender.send(message);
			

21.4.2. Sending attachments and inline resources

Email allow for attachments, but also for inline resources in multipart messages. Inline resources could for example be images or stylesheet you want to use in your message, but don't want displayed as attachment. The following shows you how to use the MimeMessageHelper to send an email along with an inline image.

JavaMailSenderImpl sender = new JavaMailSenderImpl();
sender.setHost("mail.host.com");

MimeMessage message = sender.createMimeMesage();

// use the true flag to indicate you need a multipart message
MimeMessageHelper helper = new MimeMessageHelper(message, true);
helper.setTo("test@host.com");

// use the true flag to indicate the text included is HTML
helper.setText(
  "<html><body><img src='cid:identifier1234'></body></html>"
  true);

// let's include the infamous windows Sample file (this time copied to c:/)
FileSystemResource res = new FileSystemResource(new File("c:/Sample.jpg"));
helper.addInline("identifier1234", res);

// if you would need to include the file as an attachment, use
// addAttachment() methods on the MimeMessageHelper

sender.send(message);
			

Inline resources are added to the mime message using the Content-ID specified as you've seen just now (identifier1234 in this case). The order in which you're adding the text and the resource are VERY important. First add the text and after that the resources. If you're doing it the other way around, it won't work!



娓呭挅 2005-11-24 10:37 鍙戣〃璇勮
]]>
榪欎釜欏甸潰鎬庝箞鑰佸笀鍒峰晩鍒風殑銆傘傘傘傘傘傘?/title><link>http://www.tkk7.com/purecoffee/archive/2005/11/18/20375.html</link><dc:creator>娓呭挅</dc:creator><author>娓呭挅</author><pubDate>Fri, 18 Nov 2005 02:22:00 GMT</pubDate><guid>http://www.tkk7.com/purecoffee/archive/2005/11/18/20375.html</guid><wfw:comment>http://www.tkk7.com/purecoffee/comments/20375.html</wfw:comment><comments>http://www.tkk7.com/purecoffee/archive/2005/11/18/20375.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.tkk7.com/purecoffee/comments/commentRss/20375.html</wfw:commentRss><trackback:ping>http://www.tkk7.com/purecoffee/services/trackbacks/20375.html</trackback:ping><description><![CDATA[榪欎釜欏甸潰鎬庝箞鑰佸笀鍒峰晩鍒風殑銆傘傘傘傘傘傘傚彲鎬滀竴涓嬪伓鐨勭溂鐫?img src ="http://www.tkk7.com/purecoffee/aggbug/20375.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.tkk7.com/purecoffee/" target="_blank">娓呭挅</a> 2005-11-18 10:22 <a href="http://www.tkk7.com/purecoffee/archive/2005/11/18/20375.html#Feedback" target="_blank" style="text-decoration:none;">鍙戣〃璇勮</a></div>]]></description></item><item><title>Spring,FreeMarkerhttp://www.tkk7.com/purecoffee/archive/2005/11/18/20373.html娓呭挅娓呭挅Fri, 18 Nov 2005 02:21:00 GMThttp://www.tkk7.com/purecoffee/archive/2005/11/18/20373.htmlhttp://www.tkk7.com/purecoffee/comments/20373.htmlhttp://www.tkk7.com/purecoffee/archive/2005/11/18/20373.html#Feedback0http://www.tkk7.com/purecoffee/comments/commentRss/20373.htmlhttp://www.tkk7.com/purecoffee/services/trackbacks/20373.html1銆俿pring鏃ユ湡綾誨瀷瑕佸啓鑷繁鐨勬柟娉曡鐩栧師鏈夌殑緇戝畾綾誨瀷
渚嬪鐢熸棩鍩熺殑緇戝畾
 protected void initBinder(HttpServletRequest arg0, ServletRequestDataBinder arg1) throws Exception {
  arg1.registerCustomEditor(Date.class,"birthday",getCustomDateEditor());
  super.initBinder(arg0, arg1);
 }

2.trim
The string without leading and trailing white-space. Example: (${"  green mouse  "?trim})  
The output: (green mouse)  
  3.split
  
 <#list "someMOOtestMOOtext"?split("MOO") as x>
- ${x}
</#list>   
willprint :
- some
- test
- text
 



娓呭挅 2005-11-18 10:21 鍙戣〃璇勮
]]>
姊︽兂http://www.tkk7.com/purecoffee/archive/2005/11/15/19828.html娓呭挅娓呭挅Tue, 15 Nov 2005 04:12:00 GMThttp://www.tkk7.com/purecoffee/archive/2005/11/15/19828.htmlhttp://www.tkk7.com/purecoffee/comments/19828.htmlhttp://www.tkk7.com/purecoffee/archive/2005/11/15/19828.html#Feedback1http://www.tkk7.com/purecoffee/comments/commentRss/19828.htmlhttp://www.tkk7.com/purecoffee/services/trackbacks/19828.html
娉紝榪欓〉闈㈡庝箞鑰佽嚜鍔ㄥ埛鏂幫紝錛岋紝錛?img src ="http://www.tkk7.com/purecoffee/aggbug/19828.html" width = "1" height = "1" />

娓呭挅 2005-11-15 12:12 鍙戣〃璇勮
]]>
榪欎釜欏甸潰涓嶉敊http://www.tkk7.com/purecoffee/archive/2005/11/13/19596.html娓呭挅娓呭挅Sun, 13 Nov 2005 07:25:00 GMThttp://www.tkk7.com/purecoffee/archive/2005/11/13/19596.htmlhttp://www.tkk7.com/purecoffee/comments/19596.htmlhttp://www.tkk7.com/purecoffee/archive/2005/11/13/19596.html#Feedback1http://www.tkk7.com/purecoffee/comments/commentRss/19596.htmlhttp://www.tkk7.com/purecoffee/services/trackbacks/19596.html

娓呭挅 2005-11-13 15:25 鍙戣〃璇勮
]]>
榪欓噷寰堝揩http://www.tkk7.com/purecoffee/archive/2005/11/11/19296.html娓呭挅娓呭挅Fri, 11 Nov 2005 06:55:00 GMThttp://www.tkk7.com/purecoffee/archive/2005/11/11/19296.htmlhttp://www.tkk7.com/purecoffee/comments/19296.htmlhttp://www.tkk7.com/purecoffee/archive/2005/11/11/19296.html#Feedback3http://www.tkk7.com/purecoffee/comments/commentRss/19296.htmlhttp://www.tkk7.com/purecoffee/services/trackbacks/19296.html

娓呭挅 2005-11-11 14:55 鍙戣〃璇勮
]]>
主站蜘蛛池模板: 99国产精品免费观看视频| 亚洲第一成年男人的天堂| 亚洲剧场午夜在线观看| 国产99久久久国产精免费| 84pao强力永久免费高清| 亚洲美日韩Av中文字幕无码久久久妻妇| 亚洲AV日韩综合一区尤物| 久久精品免费一区二区| 亚洲午夜久久久精品影院| 国产va免费观看| 综合久久久久久中文字幕亚洲国产国产综合一区首 | 亚洲AV日韩AV一区二区三曲| 噼里啪啦电影在线观看免费高清 | 桃子视频在线观看高清免费完整 | 亚洲AV无码国产剧情| 国产精品va无码免费麻豆| 亚洲a无码综合a国产av中文| 又色又污又黄无遮挡的免费视| 西西人体大胆免费视频| 在线观看亚洲av每日更新| 国产精品免费AV片在线观看| 亚洲AV无码一区二区二三区入口| 日韩精品无码一区二区三区免费| 亚洲欧洲日产国码www| 成人黄18免费视频| 亚洲高清免费视频| 亚洲一区影音先锋色资源| 中国在线观看免费国语版| 美女隐私免费视频看| 亚洲精品无码高潮喷水在线| 精品熟女少妇av免费久久| 亚洲熟妇成人精品一区| 亚洲午夜AV无码专区在线播放 | 免费看大美女大黄大色| 一级做a爱过程免费视频高清| 久久91亚洲精品中文字幕| 日韩精品成人无码专区免费| 美女被爆羞羞网站在免费观看 | 亚洲av永久无码精品三区在线4 | 亚洲精品免费视频| 亚洲AV成人无码久久WWW|