使用spring发送邮件例

做了个spring发送纯文本文件以及发送带附件的邮件的例子,共享之。
说明:把spring-framework-3.0.0.M4的所以包加进去,还要加
commons-logging-1.0.4.jar不然会报:java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
还要加入j2ee1.4的包,如果加入高一点的包可能还是会报错,报找不到smtp的错,这是包不一致造成的。
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.mail.javamail.JavaMailSender;
import org.springframework.mail.javamail.MimeMessagePreparator;

import javax.mail.internet.MimeMessage;
import javax.mail.MessagingException;
import javax.mail.Message;
import javax.mail.internet.InternetAddress;
import javax.activation.FileDataSource;
import javax.activation.DataHandler;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeBodyPart;
import javax.mail.Multipart;

import java.util.List;
import java.util.ArrayList;
import java.util.Date;
import java.util.Iterator;

/**
 * spring的邮件发送例子
 * 
 * @author Amigo Xie([email protected])
 * @since 2007/04/28 11:30
 */
public class SpringMail {

    public static void main(String[] args) throws Exception {
        ApplicationContext ctx = new FileSystemXmlApplicationContext("src/applicationContext-beans.xml");
        JavaMailSender sender = (JavaMailSender) ctx.getBean("mailSender");
        SpringMail springMail = new SpringMail();

        // 测试发送只有文本信息的简单测试
        springMail.sendTextMail(sender);

        // 测试发送带附件的邮件
        springMail.sendMimeMessage(sender);
    }

    /**
     * 测试发送只有文本信息的简单测试
     * 
     * @param sender
     *            邮件发送器
     * @throws Exception
     */
    private void sendTextMail(JavaMailSender sender) throws Exception {
        SimpleMailMessage mail = new SimpleMailMessage();
        mail.setTo("[email protected]");
        mail.setFrom("[email protected]");
        mail.setSubject("test by dddddd");
        mail.setText("spring Mail的简单测试");
        sender.send(mail);

        System.out.println("成功发送文本文件!");
    }

    /**
     * 发送带附件的邮件
     * 
     * @param sender
     *            邮件发送器
     * @throws Exception
     */
    private void sendMimeMessage(final JavaMailSender sender) throws Exception {
        // 附件文件集合
        final List files = new ArrayList();
        MimeMessagePreparator mimeMail = new MimeMessagePreparator() {
            public void prepare(MimeMessage mimeMessage) throws MessagingException {
                mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("[email protected]"));
                mimeMessage.setFrom(new InternetAddress("[email protected]"));
                mimeMessage.setSubject("Spring发送带附件的邮件", "gb2312");

                Multipart mp = new MimeMultipart();

                // 向Multipart添加正文
                MimeBodyPart content = new MimeBodyPart();
                content.setText("内含spring邮件发送的例子,请查收!");

                // 向MimeMessage添加(Multipart代表正文)
                mp.addBodyPart(content);
                sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
                files.add("src/测试.xml");
//                files.add("src/applicationContext-beans.xml");

                // 向Multipart添加附件
                Iterator it = files.iterator();
                while (it.hasNext()) {
                    MimeBodyPart attachFile = new MimeBodyPart();
                    String filename = it.next().toString();
                    FileDataSource fds = new FileDataSource(filename);
                    attachFile.setDataHandler(new DataHandler(fds));
                    attachFile.setFileName("=?utf-8?B?"+enc.encode(fds.getName().getBytes())+"?=");
                    mp.addBodyPart(attachFile);
                }

                files.clear();

                // 向Multipart添加MimeMessage
                mimeMessage.setContent(mp);
                mimeMessage.setSentDate(new Date());
            }
        };

        // 发送带附件的邮件
        sender.send(mimeMail);

        System.out.println("成功发送带附件邮件!");
    }
}


这是配置文件applicationContext-beans.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>
    <bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host">
            <value>smtp.163.com</value>
        </property>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.timeout">25000</prop>
            </props>
        </property>
        <property name="username">
            <value>登录邮箱的名字</value>
        </property>
        <property name="password">
            <value>登录邮箱的密码</value>
        </property>
    </bean>
</beans>


其中的
sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
attachFile.setFileName("=?utf-8?B?"+enc.encode(fds.getName().getBytes())+"?=");
是为了解决中文的问题

你可能感兴趣的:(apache,spring,xml,bean,sun)