javaMail获取邮件正文内容重复

公司项目中,需要将邮箱功能集成到自应用中,碰到的问题是,邮件正文若包含 text/plain和text/html,则会两个都获取,导致需要阅读的内容出现两次,一次是有格式的,一次是没有格式的,若只获取text/html,则有可能正文中只有text/plain的有内容,会导致正文内容为空,所以对获取正文的部分进行了调整

解析邮件

/**
*	解析邮件
*/
@Transactional
    public void parseMessage(IMAPFolder imapFolder, CrmMailAccountEntity account, Long folderId, Message... messages) throws Exception {
        if (messages == null || messages.length < 1) {
//            throw new MessagingException("未找到要解析的邮件!");
            System.out.println("未找到需要解析的邮件");
            return;
        }
        // 解析所有邮件
        Date now = new Date();
        for (int i = 0, count = messages.length; i < count; i++) {
				//其他内容暂时省略
				//获取正文内容
                StringBuffer content = new StringBuffer(30);
                MailContentVo contentVo = new MailContentVo();
                contentVo.setContent(content).setContainPlain(false);
                getMailTextContent(msg, contentVo);

				//contentVo中的content即为获取后的正文内功
				String mailContent = contentVo.getContent().toString();

        }
    }

contentVo的类

import lombok.Data;
import lombok.experimental.Accessors;

@Data
@Accessors(chain = true)
public class MailContentVo {

    private StringBuffer content;

    private boolean containPlain;
}

解析邮件正文内容

    /**
     * 获得邮件文本内容
     *
     * @param part    邮件体
     * @param contentVo 存储邮件文本内容的字符串
     * @throws MessagingException
     * @throws IOException
     */
    public static void getMailTextContent(Part part, MailContentVo contentVo) throws MessagingException, IOException {
        //如果是文本类型的附件,通过getContent方法可以取到文本内容,但这不是我们需要的结果,所以在这里要做判断
        boolean isContainTextAttach = part.getContentType().indexOf("name") > 0;
        //此处若为 "text/*" ,则会先获取w无格式的文本,再获取html格式的文本,故只抓取html格式的文本内容
        //若是从multipart/*中取得正文内容,并且text/plain中有内容,则将contentVo中的isContainPlain设置为true,后面若还包含text/html,则将contentVo中content删除,重新设置text/html中的内容即可
        if (part.isMimeType("text/html") && !isContainTextAttach) {
            if(contentVo.isContainPlain()){
                contentVo.getContent().delete(0, contentVo.getContent().length());
            }
            contentVo.getContent().append(part.getContent().toString());
            //若邮件正文不是html格式,则需要在判断一遍是否为文本格式,否则会导致抓取的邮件内容为空
        } else if (part.isMimeType("text/plain")) {
            contentVo.getContent().append(part.getContent().toString());
            contentVo.setContainPlain(true);
        } else if (part.isMimeType("message/rfc822")) {
            getMailTextContent((Part) part.getContent(), contentVo);
        } else if (part.isMimeType("multipart/*")) {
            Multipart multipart = (Multipart) part.getContent();
            int partCount = multipart.getCount();
            for (int i = 0; i < partCount; i++) {
                BodyPart bodyPart = multipart.getBodyPart(i);
                getMailTextContent(bodyPart, contentVo);
            }
        }
    }
    ```

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
没任何更新,只是在修改时加了3行代码(注意:在安装说明2的C步骤里面),实现了“注册后直接通过邮箱验证”,本程序完全支持UCH2.0,哈哈....... 新增功能: 成功注册后,email直接通过邮箱验证,免去激活! 一、罗说几句: 本人喜欢PHP,只是喜欢并非很精。所以写的PHP可能会存在一些BUG,这是在所难免的!所以请大家多多指点,一起完善它。 二、插件功能: 注册前,需要输入注册码,在点击获取注册码后,输入自己的email,然后点获取注册码就行了! 接着查收由网站发出的email注册码邮件...... 能有效的防止注册机或随便输入一个不存在的Email注册的行为。 成功注册后,email直接通过邮箱验证,免去激活! 三、安装说明: 1、解压后上传Upload文件夹中的所有文件。 2、按下面说明修改3个文件:(共4处) A.打开admin/tpl/config.htm,找到: <tr> <th>关闭邀请注册功能</th> <td> <input type="radio" name="config[closeinvite]" value="1"<!--{if $configs[closeinvite] == '1'}--> checked<!--{/if}-->>是 <input type="radio" name="config[closeinvite]" value="0"<!--{if $configs[closeinvite] != '1'}--> checked<!--{/if}-->>否 </td> </tr> 在下面添加以下代码: <tr> <th style="color:red">关闭邮箱获取注册码功能</th> <td> <input type="radio" name="config[emailcode]" value="1"<!--{if $configs[emailcode] == '1'}--> checked<!--{/if}-->>是 <input type="radio" name="config[emailcode]" value="0"<!--{if $configs[emailcode] != '1'}--> checked<!--{/if}-->>否 </td> </tr> B.打开template/default/do_register.htm,找到: <!--{else}--> <tr> <th style="vertical-align: top;">验证码</th> <td> <script>seccode();</script> <p>请输入上面的4位字母或数字,看不清可<a href="javascript:updateseccode()">更换一张</a></p> <input type="text" id="seccode" name="seccode" value="" class="t_input" onBlur="checkSeccode()" tabindex="1" autocomplete="off" /> <span id="checkseccode"> </span> </td> </tr> <!--{/if}--> <!--{/if}--> 在下面添加以下代码: <!--{if $_SCONFIG['emailcode']}--> <tr><th>注册码</th><td><input type="text" id="regcode" name="regcode" value="" class="t_input" tabindex="1" /> <a href="regcode.php">点这里获取注册码</a></td></tr> <!--{/if}--> C.打开source/do_register.php,找到: //已经注册用户 if($_SGLOBAL['supe_uid']) { showmessage('registered', 'space.php'); } 在下面添加以下代码: //注册码验证 if($_SCONFIG['emailcode']){ $query = $_SGLOBAL['db']->query("SELECT * FROM ".tname("regcode")." where regcode='".$_POST['regcode']."'"); $getrs = $_SGLOBAL['db']->num_rows($query); if($getrs == 0){showmessage('您填写的注册码不正确,请重新输入。');} $rs = $_SGLOBAL['db']->fetch_array( $query ); if($rs['email'] != $_POST['email']) { showmessage('您填写的Email地址和获取注册码的Email地址不同,请填写获取注册码的Email地址。'); } } 再找到: if($newuid <= 0) { if($newuid == -1) { showmessage('user_name_is_not_legitimate'); } elseif($newuid == -2) { showmessage('include_not_registered_words'); } elseif($newuid == -3) { showmessage('user_name_already_exists'); } elseif($newuid == -4) { showmessage('email_format_is_wrong'); } elseif($newuid == -5) { showmessage('email_not_registered'); } elseif($newuid == -6) { showmessage('email_has_been_registered'); } else { showmessage('register_error'); } } else { 在下面添加以下代码: //注册码改为已使用的 updatetable('regcode', array('checkcode'=>1), array('email'=>$email)); 再找到:(新增的直接激活邮箱) //更新默认用户好友缓存 include_once(S_ROOT.'./source/function_cp.php'); foreach ($fuids as $fuid) { friend_cache($fuid); } } } 在下面添加以下代码: //如果注册email与获取注册码的email相同,则直接通过email验证 if($rs['email'] == $_POST['email']) { updatetable('spacefield', array('emailcheck'=>1), array('uid'=>$newuid)); } 3、运行install_regcode.php。 4、登陆后台,更新缓存。 5、在站点设置->注册显示,里面开启“关闭邮箱获取注册码功能”。 建议开启这个功能时,关闭验证码和验证问题功能,要不然给人感觉注册太麻烦了。其实这个功能已经很使用了! 四、插件结构: 文件夹 PATH 列表 │ install_regcode.php 安装文件 │ regcode.php Email注册码主程序 └─template 模板目录 └─default 默认模板目录 regcode_index.htm Email注册码模板文件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值