posts - 0, comments - 77, trackbacks - 0, articles - 356
  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理

spring mail发送

Posted on 2007-05-11 17:58 semovy 阅读(1176) 评论(0)  编辑  收藏 所属分类: spring

package com.action;

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

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

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;

 

public class SpringMail {
 public static void main(String[] args) throws Exception {
        ApplicationContext ctx = new FileSystemXmlApplicationContext(
                "applicationContext.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("superman_wshm@126.com");
        mail.setFrom("superman_wshm@126.com");
        mail.setSubject("test by amigo");
        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("superman_wshm@126.com"));
                mimeMessage.setFrom(new InternetAddress("superman_wshm@126.com"));
                mimeMessage.setSubject("Spring发送带附件的邮件", "gb2312");
               
                Multipart mp = new MimeMultipart();
               
                //向Multipart添加正文

                MimeBodyPart content = new MimeBodyPart();
                content.setText("内含spring邮件发送的例子,请查收!");
               
                //向MimeMessage添加(Multipart代表正文)
                mp.addBodyPart(content);
                files.add("com/action/SpringMail.java");
                files.add("applicationContext.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(fds.getName());
                    mp.addBodyPart(attachFile);
                }
               
                files.clear();
               
                //向Multipart添加MimeMessage
                mimeMessage.setContent(mp);
                mimeMessage.setSentDate(new Date());
            }
        };

        //发送带附件的邮件
        sender.send(mimeMail);
       
        System.out.println("成功发送带附件邮件!");
    }

}


Spring配置文件applicationContext.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.126.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>superman_wshm</value>
  </property>
  <property name="password">
   <value>******</value>
  </property>
 </bean>


</beans>


 刚才发现一bug,当附件名为中文时,会出现中文乱码问题,对sendMimeMessage方法进行了部分修改,如下:
   

               sun.misc.BASE64Encoder enc = new sun.misc.BASE64Encoder();
                files.add(
"src/SpringMail.java");
                files.add(
"src/applicationContext.xml");
                files.add(
"src/谢星星.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(
"=?GBK?B?"+enc.encode(fds.getName().getBytes())+"?=");
                    mp.addBodyPart(attachFile);
                }

只有注册用户登录后才能发表评论。


网站导航: