使用 JavaMail 阅读阿拉伯语附件

2023-12-03

我在使用 java 邮件下载阿拉伯语附件文件时遇到问题。

文件名总是不明确的。

问题是Bodypart以非 UTF-8 字符形式检索附件。

private void getAttachments(Message temp) throws IOException, MessagingException {
    List<File> attachments = new ArrayList<File>();

    Multipart multipart = (Multipart) temp.getContent();

    System.out.println(multipart.getCount());

    for (int i = 0; i < multipart.getCount(); i++) {
        BodyPart bodyPart = multipart.getBodyPart(i);
        if (!Part.ATTACHMENT.equalsIgnoreCase(bodyPart.getDisposition())) {
            continue; // dealing with attachments only
        }
        InputStream is = bodyPart.getInputStream();

        // getFilename always have wrong characters set 
        byte [] fileBytes = bodyPart.getFileName().toString().getBytes();

        String filename = new String(fileBytes, "UTF-8");            

        File f = new File("C:\\Attachments\\" + filename);

         System.out.println(f .getName());

         try {
        if (f == null) {
            //filename = File.createTempFile("VSX", ".out").getName();
            return;
        }

        FileOutputStream fos = new FileOutputStream(f );
        BufferedOutputStream bos = new BufferedOutputStream(fos);
        BufferedInputStream bis = new BufferedInputStream(is);

        int aByte;
        while ((aByte = bis.read()) >=0) {
            bos.write(aByte);
        }

        fos.flush();
        bos.flush();
        bos.close();
        bis.close();
        fos.close();
    } // end of try()
    catch (IOException exp) {
        System.out.println("IOException:" + exp);
    }        

        attachments.add(f);
    }
}

标头根据 RFC 2047 中描述的机制进行编码(它是encoded-word)这表示标头的一部分匹配=??B??=是字节编码部分。 表示如何解释字节,并且(因为它是B风格,而不是Qstyle) 采用 base-64 编码。

这一切都相当复杂。幸运的是,您可以通过使用 static 轻松处理这个问题javax.mail.internet.MimeUtility.decodeText()方法。这意味着你可以切换到这个:

String filename = MimeUtility.decodeText(bodyPart.getFileName());

实际上,你最好也将其与下一行结合起来:

File f = new File("C:\\Attachments",
                  MimeUtility.decodeText(bodyPart.getFileName()));

这样做更好,因为与尝试手动完成这一切相比,它可以避免更多构建文件名的麻烦。 (这也意味着您可以将该文字路径名分解到某个配置位置。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 JavaMail 阅读阿拉伯语附件 的相关文章

随机推荐

  • 用表单搜索my​​sqli表并显示结果

    我正在搜索一个表格 其中的结果可能来自 3 个选项 cata catb 或 catc 中的任何一个 然后显示结果 但是我的错误警告不断弹出并且无法显示结果 我被困住了
  • 字符串到 int 的转换和字符串操作 MIPS

    对于我的家庭作业 我需要使用 MIPS 获取前面带有任意字母后跟数字 例如 x123 的输入 然后将数字加 5 然后打印出最终数字 从示例中输出将是 128 data entmsg asciiz Enter a string n ui1 s
  • 如何使用 JSch 和 SFTP 协议检查读取权限?

    我知道有getPermissions 方法 但不知道怎么用 如何使用 JSch 检查用户是否可以读取文件 首先 您通常应该问一个功能性问题 您想要实现什么 以获得有用的答案 您要求实现 技术细节 因此我可能无用的技术答案 SftpATTRS
  • 在 VC++ 中使用 openCV 进行网络摄像机视频流传输

    我从来没有编写过 VC 应用程序 现在我被分配了一个捕获 IP 摄像机并将其保存为硬盘上的文件的任务 我过去两天一直在冲浪 但找不到任何合适的链接或代码 我在网上找到的示例代码捕获网络摄像头 但与使用凭据读取 rtsp 协议上的视频流无关
  • 使用 Dart 下载 PNG 文件(二进制文件)并显示它不起作用

    我有一个 Rest API 我调用它来检索要在我的页面上显示的 PNG 图像 My Code void getProfilePicture var pic id request new HttpRequest request respons
  • PayPal - 使用 php 加密多项目自定义购物车动态结账按钮

    我创建了一个网站 要求我构建一个自定义购物篮以满足业务需求 这一切工作正常 上周我一直在尝试制作一个加密的 使用 PayPal 结帐 按钮 首先我尝试了这个 www x com message 174366 没有超链接 因为我是新用户 抱歉
  • 了解子文件夹中的 Web.config 层次结构

    在我的 Visual Studio Web 项目中是Web config在根 That Web config文件定义了一个网络User and Password用于基本网络身份验证
  • 覆盖特定的第三方 Woocommerce 插件模板

    我正在使用基于 Woocommerce 的插件 名为混合搭配产品 这个插件位于里面 plugins woocommerce mix and match products 此文件夹包含另一个模板文件夹 按照惯例 我复制了 模板将 文件夹放入我
  • 如何验证(泛型(泛型参数))?

    背景 我们真的不需要担心 这是一个源自于的问题构建具有继承性的通用树 我将这个问题作为一个单独的问题来打开 因为这不仅与树问题有关 这更多的是一个通用和类问题 Question 为了更好地用代码来说明 我们有一个Tree类 一个SubTre
  • 打印 Python 函数中输入的参数名称

    我有类似的东西 def myfunc list 当我调用该函数时 我可以输入类似 myfunc List1 有没有办法打印出函数中作为参数输入的列表 就像是 def myfunc list print list name 那会给出 myfu
  • 每个表视图单元格一个计时器

    我想点击表格单元格并启动计时器 每个单元都应该有自己的计时器 我已经成功设置了计时器 但不是独立设置的 当我设置一个计时器时 所有单元格都已设置 func tableView tableView UITableView didSelectR
  • 如何覆盖 Magento 中的默认搜索?

    我正在 Magento 网站上工作 我想编辑默认搜索结果 编辑搜索结果不是编辑搜索结果的外观 而是编辑实际生成的搜索结果 这个想法是 如果 Magento 搜索不返回任何值 那么我需要在自定义表中进行搜索以获取一些相关产品 谁能帮我编辑默认
  • 当allow_url_fopen打开时,php file_get_contents返回null

    我收到警告消息 file get contents 无法打开流权限被拒绝 我已在 php ini 文件中将 all url open 设置为 on 我的 php 文件位于我的 apache 服务器中 它正在尝试从同一台计算机上的 tomca
  • 如何读取/加载带有前导零的 yaml 参数作为字符串?

    如何读取 加载带有前导零的 YAML 参数作为字符串并在 python 3 7 中进行操作 从使用 yaml cpp yaml 1 2 的 C 工具中 我得到一个文本文件 其中包含leading zero 00005 读取 加载这行代码 似
  • 如何在 VB.net 中使用 IMAP 命令从 Gmail.com 服务器获取响应?

    我正在使用 Visual Basic 2010 专业版 我正在开发一个软件 其中一部分是获取 收件箱 电子邮件 但我什至无法从服务器获得响应 我做了这些步骤 确保我的 Gmail com 帐户可以使用 IMAP 我使用的是两步验证方法 因此
  • SQLException:值的数量不相同

    我使用 Apache Derby 作为嵌入式数据库 数据库检查 java 该类用于创建表 package normal This class if s for checking the database If the database do
  • javascript中数组交集的最简单代码

    在 javascript 中实现数组相交的最简单的 无库的代码是什么 我想写 intersection 1 2 3 2 3 4 5 and get 2 3 使用组合Array prototype filter and Array proto
  • 为什么 jQuery.ready 有删除线?

    当我将代码复制并粘贴到这个问题中时 ready没有删除线 但在我的 IDE VS 中 您会看到它看起来像 ready罢工 gt 这有什么意义吗 该代码似乎仍然有效 但如果这是一个问题 我想现在就解决它 因为我想以正确的方式使用 jQuery
  • 在之前的 onFormSubmit 完成之前,如何阻止表单提交。

    我编写了一个表单脚本来消除所选答案 这意味着它必须处理 onFormSubmit 函数 当脚本运行时 最终用户必须等待 30 秒才能单击 重新提交 否则该选择将不会被消除 有没有办法可以在 onFormSubmit 函数完成之前阻止提交 我
  • 使用 JavaMail 阅读阿拉伯语附件

    我在使用 java 邮件下载阿拉伯语附件文件时遇到问题 文件名总是不明确的 问题是Bodypart以非 UTF 8 字符形式检索附件 private void getAttachments Message temp throws IOExc