Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 1744|回复: 0

使用Spring中的JavaMailSenderImpl发送邮件

  [复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2013-1-11 11:29:31 | 显示全部楼层 |阅读模式
    1,在spring的配置文件中,配置javaMailSenderImpl,如下:
       <!--邮件服务器-->
        <bean id="mailSender">
            <property name="host">
                <value>${mail.smtp.host}</value>
            </property>
            <property name="javaMailProperties">
                <props>
                    <prop key="mail.smtp.auth">${mail.smtp.auth}</prop>
                    <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop>
                </props>
            </property>
            <property name="username">
                <value>${mail.user}</value>
            </property>
            <property name="password">
                <value>${mail.pwd}</value>
            </property>
        </bean>
    其中,${}中的值从mail.properties文件中读取,mail.properties文件中的配置:
    mail.smtp.host=邮箱服务器
    mail.user=用户名
    mail.pwd=密码
    mail.from=发送者的邮箱
    mail.replyTo=回复者的邮箱
    mail.smtp.timeout=25000
    mail.smtp.auth=true
    mail.ad.host=ad服务器
    该properties文件在spring.xml文件中的配置如下:
        <!-- 加载配置文件 -->
        <bean>
            <property name="locations">
                <list>
                    <value>/WEB-INF/springcfg/dataSource.properties</value>
                    <value>/WEB-INF/springcfg/mail.properties</value>
                </list>
            </property>
        </bean>
    2,创建一个实体类Mail.java,封装邮件的属性:
    import java.io.File;
    import java.io.Serializable;
    import java.util.List;

    public class Email implements Serializable {
        private static final long serialVersionUID = 9063903350324510652L;

        /** 用户组:可以按用户组来批量发送邮件 **/
        /** 待用属性 **/
        /** 收件人 **/
        private List<String> address;
        /** 暗送 **/
        private String bcc;
        /** 抄送给 **/
        private List<String> cc;
        /** 邮件主题 **/
        private String subject;
        /** 邮件内容 **/
        private String content;
        /** 附件 **/
        private List<File> annexFile;

        public List<String> getAddress() {
            return address;
        }

        public void setAddress(List<String> address) {
            this.address = address;
        }

        public List<String> getCc() {
            return cc;
        }

        public void setCc(List<String> cc) {
            this.cc = cc;
        }

        public String getSubject() {
            return subject;
        }

        public void setSubject(String subject) {
            this.subject = subject;
        }

        public String getContent() {
            return content;
        }

        public void setContent(String content) {
            this.content = content;
        }

        public List<File> getAnnexFile() {
            return annexFile;
        }

        public void setAnnexFile(List<File> annexFile) {
            this.annexFile = annexFile;
        }

        public String getBcc() {
            return bcc;
        }

        public void setBcc(String bcc) {
            this.bcc = bcc;
        }
    }
    3,创建发送邮件的工具类MailUtil.java:
    import java.io.File;
    import java.io.IOException;
    import java.util.List;
    import java.util.Properties;

    import javax.mail.internet.MimeMessage;
    import javax.mail.internet.MimeUtility;

    import org.springframework.core.task.TaskExecutor;
    import org.springframework.mail.javamail.JavaMailSender;
    import org.springframework.mail.javamail.MimeMessageHelper;


    public class MailUtil {
       
        private JavaMailSender mailSender;
        private TaskExecutor taskExecutor;
        private Properties mailProperty;
       
        private StringBuffer message = new StringBuffer();
       
       
    //    public static ResourceBundle getProperties() {
    //        ResourceBundle rb = ResourceBundle.getBundle("mail");
    //        return rb;
    //    }
        public void setMailProperty(Properties mailProperty) {
            this.mailProperty = mailProperty;
        }


        /**
         * 一对多发送邮件
         * @param mail
         * @param subject
         * @param content
         * @param copyMail
         * @return
         */
       
        public boolean sendMail(List<String> mailList, String subject, String content,List<String> copyMailList){
            boolean flag = false;
            try {
                Email email = new Email();
                email.setAddress(mailList);
                
                if(copyMailList!= null){
                    email.setCc(copyMailList);
                }
                
                email.setContent(content);
                email.setSubject(subject);
                sendMail(email);
                flag = true;
            } catch (Exception e) {
                e.printStackTrace();
            }
            return flag;
        }


        /**
         * 发送邮件
         * @param email
         * @throws Exception
         */
        public void sendMail(Email email) throws Exception {
            if (email.getAddress() == null || email.getAddress().size() == 0) {
                this.message.append("没有收件人");
                return;
            }

            if (email.getAddress().size() > 5) {// 收件人大于5封时,采用异步发送
                sendMailByAsynchronousMode(email);
                this.message.append("收件人过多,正在采用异步方式发送...<br/>");
            } else {
                sendMailBySynchronizationMode(email);
                this.message.append("正在同步方式发送邮件...<br/>");
            }
        }

        /**
         * 异步发送
         *
         */
        public void sendMailByAsynchronousMode(final Email email) {
            taskExecutor.execute(new Runnable() {
                public void run() {
                    try {
                        sendMailBySynchronizationMode(email);
                    } catch (Exception e) {
                    }
                }
            });
        }

        /**
         * 同步发送
         *
         * @throws IOException
         */

        public void sendMailBySynchronizationMode(Email email) throws Exception {
            MimeMessage mime = mailSender.createMimeMessage();
            MimeMessageHelper helper = new MimeMessageHelper(mime, true, "utf-8");
            helper.setFrom(this.mailProperty.getProperty("mail.from"));// 发件人

            List<String> list = email.getAddress();
            String[] addrs = new String[list.size()];
            for (int i = 0; i < list.size(); i++) {
                addrs[i] = list.get(i);
            }
            helper.setTo(addrs);// 收件人
            // helper.setBcc(email.getBcc());// 暗送

            List<String> ccList = email.getCc();
            if(ccList!=null ){
                String[] cc = new String[ccList.size()];
                for (int i = 0; i < ccList.size(); i++) {
                    cc[i] = ccList.get(i);
                }
                helper.setCc(cc);// 抄送
            }
            
            // 内嵌资源,这种功能很少用,因为大部分资源都在网上,只需在邮件正文中给个URL就足够了.
            // helper.addInline("logo", new ClassPathResource("logo.gif")); //处理附件
            if(email.getAnnexFile()!=null){
                for (File file : email.getAnnexFile()) {
                    if (file == null) {
                        continue;
                    }
                    helper.addAttachment(MimeUtility.encodeWord(file.getName()), file);
                }
            }
            
            helper.setReplyTo(this.mailProperty.getProperty("mail.replyTo"));// 回复到
            helper.setSubject(email.getSubject());// 邮件主题
            helper.setText(email.getContent(), true);// true表示设定HTML格式
            
            mailSender.send(mime);
        }
       
        public JavaMailSender getMailSender() {
            return mailSender;
        }

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

        public TaskExecutor getTaskExecutor() {
            return taskExecutor;
        }

        public void setTaskExecutor(TaskExecutor taskExecutor) {
            this.taskExecutor = taskExecutor;
        }

    }
    4,在spring配置文件中配置MailUtil:
        <!-- Email -->
        <bean id="mailUtil" scope="prototype">
            <property name="mailSender" ref="mailSender" />
            <property name="taskExecutor" ref="taskExecutor" />
            <property name="mailProperty">
                <props>
                    <prop key="mail.from">${mail.from}</prop>
                    <prop key="mail.replyTo">${mail.replyTo}</prop>
                </props>
            </property>
        </bean>
    5,此时便可以在service层设置MailUtil的getter和setter方法然后使用MailUtil的对象来发送邮件了。。。。

    回复

    使用道具 举报

    该用户从未签到

    发表于 2013-1-11 11:30:14 | 显示全部楼层
    谢谢楼主 总结的很好啊。。
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-5-20 15:11 , Processed in 0.474358 second(s), 45 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表