zoukankan      html  css  js  c++  java
  • 关于使用commons-email包测试发送邮件遇到的问题

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

            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。


           

  • 相关阅读:
    Java MVC和三层架构
    EL表达式
    EL表达式中的11个隐式对象
    JDBC连接数据库7个步骤
    JSP九大内置对象和四个作用域
    Eclipse常用快捷键大全
    Java的绝对路径和相对路径
    Servlet中相对路径与绝对路径
    mysql8的深坑
    mysql单列索引和联合索引
  • 原文地址:https://www.cnblogs.com/riskyer/p/3279672.html
Copyright © 2011-2022 走看看