• J2EE 邮件发送那些事儿


         距离自己写的关于java邮件发送的第一篇博客已经有很长一段时间了,现在回过头看看。虽然代码质量方面有待提高,整体结构也不怎样,但是基本思路和过程还是比较纯的。现在有空写写J2EE中邮件发送的开发,实际上,在开发java web应用程序时,很多时候都需要邮件发送;比如说在用户注册,激活帐号,用户修改密码等,以及在应用中进行一些比较敏感的操作时,像这类的情况都是需要发送邮件确认的。然而,如何有效地开发出一个可以直接调用的模块?如何轻松的实现这么一个功能?如何科学地提高自己应用程序的档次?这个邮件发送通通可以有。

          会用电脑的基本都知道,那些发送邮件的功能是在程序中加入的。应用用户在进行某项操作时,应用就直接发送模板邮件到指定用户的邮箱。

          对于邮件发送的基本原理和一些简单的邮件发送知识可以参看我的第一篇博客《Java mail基础案例开发》 ,今天这篇博客不再介绍邮件发送的基本原理,而是直接应用已有的开源工具包,在自己的应用程序中加入邮件发送功能,开发出仅仅属于自己的邮件发送模块。

              作者:itRed         邮箱:it_red@sina.com        博客链接:http://itred.cnblogs.com

             本文是itRed发表于博客园,转载请标明原文出处。本博文是自己学习总结所得,欢迎大神指教。

          利用apache的开源邮件发送似乎是很简单的,但是,我想把这个功能作为一个小型模块来直接用,并不是仅仅写一个测试类就行。当存在了apache的开源框架包,直接写一个邮件发送类是很容易的。网上这样的教程也很多。因此,我想要更加完美一点的邮件发送模块。在应用中的其他模块中调用起来也比较方便。好了,废话不多说。直接将自己的开发过程贴出,与诸位初学者共享。利用Apache邮件组件开发需要的jar包有commons-email-X.X.jar、mail.jar。网上有朋友说还需要一个叫做activition的jar包,个人认为不是很需要。在本案例的开发中没有用到activition的jar包。所用到的邮件组件的版本为:commons-email-1.2.jar 和 mail.jar 。本文提供下载链接:点击即可下载。

          好了,下载完两个jar包后,新建一个项目工程,可以是web,也可以是java。没有什么特殊需要注意的地方。因为当你的应用程序中需要添加这一模块时,直接调用这个发送方法即可,很方便。

         ----------------------------------demo----------------------------------------------------

    1. 直接建一个java工程,导入jar包;build path;(如果你建的时web项目就不需要进行build path了,因为web项目会自动build path);
    2. 新建实体bean对象:

        邮件实体:

        private String logo;// logo ,附图片
        private String phone;// 邮箱中附联系电话
        private String address;// 邮箱中附联系地址
        private String server;// 邮箱服务器
        private String port;// 邮件服务器端口
        private String email;// 发送邮箱
        private String passwd;// 发送邮箱密码
    
        public MailBean() {
    
        }
    
        public MailBean(String server, String port, String email, String passwd,
                String msg) {
            this.server = server;
            this.port = port;
            this.email = email;
            this.passwd = passwd;
        }
    
        public MailBean(String logo, String phone, String address, String server,
                String port, String email, String passwd) {
            this.logo = logo;
            this.phone = phone;
            this.address = address;
            this.server = server;
            this.port = port;
            this.email = email;
            this.passwd = passwd;
        }
        //....其中各get和set方法已经省略。

        邮件内容实体bean:

        private String title; // 邮件主题
    private String message;// 邮件内容 private String file;// 附件 public MailContent() { this.title = "test"; this.message = "test"; } public MailContent(String title, String message) { this.title = title; this.message = message; } //......其中各get和set方法已经省略。

      3. 新建邮件内容模板接口,并实现这个接口类:

    public interface MailModel {
    
        /**
         * 设置邮件样式
         * @param mail 发送端设置信息
         * @param content 发送内容
         * @return 生成的邮件样式
         */
        public String format(MailBean mail, MailContent content);
    
    }

        实现类:

    package com.red.mail.model;
    
    import com.red.mail.MailBean;
    import com.red.mail.MailContent;
    
    /**
     * 邮件默认样式
     * 
     * @author Red
     * @version 1.0
     */
    public class DefaultModel implements MailModel {
    
        /**
         * 设置邮件默认样式
         * @param bean 发送端设置信息
         * @param content 发送内容
         * @return 生成的邮件样式
         */
        public String format(MailBean bean, MailContent content) {
            String htmlmsg = "<style class='fox_global_style'>div.fox_html_content { line-height: 1.5; }div.fox_html_content { font-size: 10.5pt; font-family: 宋体; color: rgb(0, 0, 0); line-height: 1.5; }</style><div style='MARGIN: 10px; FONT-FAMILY: verdana; FONT-SIZE: 10pt'>"
                    + content.getTitle()
                    + "<br><br><hr/><img src='"
                    + bean.getLogo()
                    + "'></div><div style='margin: 10px; font-size: 13px;'><font face='Arial'>"
                    + content.getMessage()
                    + " &nbsp;</font></div><div style='margin: 10px; font-size: 13px;'><span style='background-color: rgba(0, 0, 0, 0); font-family: Arial; line-height: 1.5;'>24小时联系电话:"
                    + bean.getPhone()
                    + "</span></div><div style='margin: 10px; font-size: 13px;'><span style='font-family: 宋体, Tahoma; font-size: small; line-height: normal;'>"
                    + bean.getAddress() + "</span></div>";
            return htmlmsg;
        }
    
    }

        邮件发送操作类:(测试)

      public static void main(String[] args) {
            try {
                //定义一些邮件参数
                final MailBean mailBean = new MailBean("http://www.baidu.com/img/bd_logo1.png", "13671****29", "四川省成都市", "smtp.sina.com.cn", "25", "it_red@sina.com", "密码");
                MailContent mailContent = new MailContent("测试邮件的主题", "测试");
                File filepath = new File("test.txt附件");
                if (!filepath.exists()) {
                    filepath.createNewFile();
                }
                mailContent.addFile(filepath.getAbsolutePath());
                String[] receives = {"收件人的邮箱地址 "};
                String[] carbons = {"邮件抄送到某人的邮箱地址 "};
                //发送代码时,只要有参数就只需要调用以下几行代码就可以了
                MailCenter center = new MailCenter(mailBean, receives, carbons);
                center.setMailModel(new DefaultModel());
                center.send(mailContent);
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (EmailException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

      现在可以查看邮箱了,其中的邮件内容截图如下:(因为我用的图片是百度的logo,所以比较大,我也没有换一张稍微小一点的。所以。。。。仅作测试用!

        

        到这里,一个简单的邮件发送模块就算完成了。我相信有了这个模块,在自己的应用程序中都会显得高大上!而且,我也相信,基本上在软件行业的公司,邮件发送的开发绝对是必不可少的一个小模块!希望有这一个小巧而且简单的案例能起到抛砖引玉的作用,为正在研究邮件发送开发的朋友们提供一个demo,用来提高自己的程序水平;同时,也希望得到大神朋友的指教。共同进步!

    作者:itRed         
    邮箱:it_red@sina.com            
    博客:http://www.cnblogs.com/itred        个人网站:http://wangxingyu.jd-app.com
    ***版权声明:本文版权归作者和博客园共有,欢迎转载,但请在文章显眼位置标明文章出处。未经本人书面同意,将其作为他用,本人保留追究责任的所有权利。

     

     

     

  • 相关阅读:
    多线程(6)线程属性
    多线程(五) Thread和Object中线程相关方法
    面试汇总
    多线程(4)线程生命周期
    多线程(3) 多线程之线程的停止和中断
    springboot(6)redis缓存
    软件安装(总)
    redis分布式锁
    第一天
    Thinkphp5高级进阶教程
  • 原文地址:https://www.cnblogs.com/itred/p/4242640.html
Copyright © 2020-2023  润新知