项目中有个需求是这样的:客户办理某一项业务,当用户成功提交业务办理信息后,系统生成一个业务随机码给用户,以此作为以后的业务办理结果查询依据。鉴于随机码较长,方便用户记录,在生成随机码的同时,提供用户发送随机码到用户指定邮箱的功能。所以这里有了发送邮件的需求。

java中邮件发送的jar包也不少,度娘了下,发现好多人使用commons-mail.jar来发送邮件,看代码觉得设置比较简洁,所以拿来试了一把。

整体来说,使用过程真的比较简洁,但是也出现了几个问题。现把问题记录在案,以便后续参考。

commons-mail使用的版本是commons-mail-1.3.1,以下是测试发送邮件的代码,

/**
         * 发送邮件
         * @param reciever 收信人地址
         * @param subject 邮件标题
         * @param content 邮件内容
         * @return 1 发送邮件成功 0 发送邮件失败
         */
        public static int sendMail(String reciever, String subject, String content) {
            try {
                SimpleEmail email = new SimpleEmail();
                email.setAuthentication(MAIL_USERNAME, MAIL_PASSWORD);
                email.setHostName(MAIL_HOSTNAME);
                email.setFrom(MAIL_SENDER);
                email.addTo(reciever);
                email.setSubject(subject);
                email.setContent(content, "text/plain;charset=utf-8");
                email.send();
                return 1;
            } catch (EmailException e) {
                System.out.println(e.getMessage());
                return 0;
            }
        }

我的工程是一个新建的java web工程, 引入了j2ee5的类库,然后第三方类库就是commons-mail-1-3-1.jar了。

错误信息1:这时候调用上面的邮件发送方法时,邮件发送失败,抛出的异常信息为:“Sending the email to the following server failed : smtp.163.com:25”,依旧度娘了下,告诉我说,缺少了mail.jar和activation.jar两个包。

错误信息2: 项目中添加了这两个jar包之后,怀着忐忑的心情,继续调用上述方法发送邮件,果然...,控制台直接报出了红色的信息,“Exception in thread "main" java.lang.NoClassDefFoundError: com/sun/mail/util/LineInputStream”,定神看了看,原来是有class未找到。这问题比较常见,度娘说,这个太小儿科了,好多人都问过这个问题了,刚刚引入的两个jar包在j2ee5类库里已经有了,但是实现有些差异,因此报出了刚刚的错误,言之有理,果断remove掉了j2ee5的类库,再次运行程序,发现邮件发送出去了,搞定。

附:其实如果j2ee类库选择j2ee6,mail.jar和activation.jar两个jar包,可以不再引入,依然能发送邮件。那么由此推测我添加的mail.jar和activation.jar两个jar包已经在j2ee6中有版本一致的一份,因此我最终的项目使用j2ee6。

关于使用commons-email包测试发送邮件遇到的问题的更多相关文章

  1. 使用Apache commons email发送邮件

    今天研究了以下怎么用java代码发送邮件,用的是Apache的commons-email包. 据说这个包是对javamail进行了封装,简化了操作. 这里讲一下具体用法吧 一.首先你需要有邮箱账号和一 ...

  2. 使用Commons Email发送邮件

    Commons Email是apache commons库中的一个组件,对java mail做了一些个封装,提供能为简化的API供开发者使用.它依赖于javax.mail . 首先下载commons- ...

  3. apache commons Java包简介

    更多信息,请参考:http://commons.apache.org/ 一.Commons BeanUtils说明:针对Bean的一个工具集.由于Bean往往是有一堆get和set组成,所以BeanU ...

  4. Commons Email使用

    Apache Commons Email Apache的一个开源项目,是基于另一个开源项目Java Mail上进行封装的,使用起来更加简单方便: http://commons.apache.org/p ...

  5. 使用Python内置的smtplib包和email包来实现邮件的构造和发送。

    此文章github地址:https://github.com/GhostCNZ/Python_sendEmail Python_sendEmail 使用Python内置的smtplib包和email包 ...

  6. Fiddler抓包测试App接口

    Fiddler抓包测试App接口 使用Fiddler对手机App应用进行抓包,可以对App接口进行测试,也可以了解App传输中流量使用及请求响应情况,从而测试数据传输过程中流量使用的是否合理. 抓包过 ...

  7. apache commons io包基本功能

    1. http://jackyrong.iteye.com/blog/2153812 2. http://www.javacodegeeks.com/2014/10/apache-commons-io ...

  8. 使用Apache Commons Email 发生邮件

    Apache Commons Email的Maven依赖 <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-e ...

  9. apache commons lang包中的StringUtils

    计算一个字符串某个字符的出现次数 a, 使用charAt方法截取之后,循环判断. b, 使用apache commons lang包中的StringUtils: int n = StringUtils ...

随机推荐

  1. Android核心基础(十一)

    1.Android的状态栏通知(Notification) 通知用于在状态栏显示消息,消息到来时以图标方式表示,如下: //获取通知管理器 NotificationManager mNotificat ...

  2. SQL SERVER递归查询

    SQL SERVER 进行递归查询 有如下数据表

  3. NET Core R2跑Hello World

    在CentOS 7上安装.NET Core R2跑Hello World 前言 在上个月.NET Core出了最新版本预览版,只是在Window系统上试验了一下.原本想等发布正式版的时候在linux系 ...

  4. javax.servlet.http.HttpServletRequest;

    错误提示是没有引入javax.servlet.http.HttpServletRequest所在的包,编译错误. 这么添加: 项目-->右键-->properties-->java ...

  5. 基于visual Studio2013解决C语言竞赛题之1047百马问题

      题目 解决代码及点评 /* 47.马百瓦问题.有100匹马,100块瓦,大马驮3块, 小马驮2块,两个马驹驮1块.问大马.小马.马驹各多少? 要求:① 不许用for循环; ② 循环次数 ...

  6. CIconListBox带图标的列表框类

    有时候,我们需要在列表框ListBox中插入带图标的文字项,这就需要自己派生一个类出来了,网上的一个CIconListBox类还不错,网站http://www.codeguru.com/Cpp/con ...

  7. EasyUI - Dialog 对话框

    效果: html代码: 其中有class加载方式和Javascript加载方式. <!--class加载方式--> <%--<div id="dd" cla ...

  8. Spring MVC 多选框 绑定 Entity 中的 list 属性

    问题描述: 有两个类:Record.java 和 User.java,Record中有个attenders属性,是List<User>类型. 我想绑定Record中的attenders.网 ...

  9. FindLetter 类——查找文件中特定的字符,每一行开头为某一个字符,则跳过

    /*统计除了>之外的行里面CHED四个字母总数*/ #include<fstream> #include<iostream> #include<cstring> ...

  10. JavaScript进阶(三) 值传递和引用传递

    从C语言开始 有时候讲一些细节或是底层的东西,我喜欢用C语言来讲,因为用C更方便来描述内存里面的东西.先举一个例子,swap函数,相信有一些编程经验的人都见识过,声明如下,函数体我就不写了,各位脑补一 ...