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

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. 数学之路-python计算实战(15)-机器视觉-滤波去噪(归一化块滤波)

    # -*- coding: utf-8 -*- #code:myhaspl@myhaspl.com #归一化块滤波 import cv2 import numpy as np fn="tes ...

  2. 数据交换工具Kettle

    网上搜集了一些关于开源数据交换工具Kattle的文章,特收藏例如以下: 文章一:ETL和Kettle简单介绍 ETL即数据抽取(Extract).转换(Transform).装载(Load)的过程.它 ...

  3. win7 虚拟机 ios开发环境搭建

    http://www.cnblogs.com/xiaoyaoju/archive/2013/05/21/3091171.html

  4. WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用

    原文:WCF技术剖析之十五:数据契约代理(DataContractSurrogate)在序列化中的作用 [爱心链接:拯救一个25岁身患急性白血病的女孩[内有苏州电视台经济频道<天天山海经> ...

  5. C# 中 双问号??的用法

    int? x = null;int y = x ?? -1; 这里的y不能为null,但是等于x,x为null时赋值给y会报错.?? 可以在x==null时对y赋值-1 更多相关资料:https:// ...

  6. 恢复PasswordChar 默认值、取消密码框设置

    //三种都是清空 this.textBox1.PasswordChar = new char(); this.textBox1.PasswordChar = '\0'; this.textBox1.P ...

  7. backbone入门小例子

    最近听了个backbone的分享,为了避免听不懂,就先做了个小例子 例子很简单,效果如下 基本视图模板: <script type="tex/template" id=&qu ...

  8. Qt的setMouseTracking使用

    bool mouseTracking 这个属性保存的是窗口部件跟踪鼠标是否生效. 如果鼠标跟踪失效(默认),当鼠标被移动的时候只有在至少一个鼠标按键被按下时,这个窗口部件才会接收鼠标移动事件. 如果鼠 ...

  9. 小型Mp3播放器

    准备三张图片,名字分别为: play.pause.stop. 将一个名为Mp3的文件放入res/raw文件夹中. 在main.xml中: <LinearLayout xmlns:android= ...

  10. hibernate解决oracle的id自增?

    以前做SSH项目时,涉及到的数据库是mySQL,只需将bean的配置文件id设为native 就可以实现表id的自增. 现在用到了Oracle,当然知道这样是不行的啦,那么用序列自增? 我在网络上搜索 ...