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入门到精通教程
查看: 702|回复: 0

[JavaEE] 使用Spring中的JavaMailSenderImpl发送邮件

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

    [LV.4]偶尔看看III

    发表于 2013-12-22 15:00:26 | 显示全部楼层 |阅读模式
    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的对象来发送邮件了。。。。
    回复

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-4-26 05:36 , Processed in 0.389730 second(s), 47 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

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