当前位置: 首页 > 面试题库 >

使用协议“ mapi://”从Java在Outlook中打开邮件

越昊穹
2023-03-14
问题内容

我使用Windows桌面搜索开发Java应用程序,从中可以检索有关计算机文件的一些信息,例如url(System.ItemUrl)。这样的URL的一个例子是

file://c:/users/ausername/documents/aninterestingfile.txt

用于“普通”文件。此字段还提供从Outlook或Thunderbird索引的邮件项目的URL。雷鸟的项目(仅适用于Vista和7)也是文件(.wdseml)。但是Outlook的项目网址以“
mapi://”开头,例如:

mapi://{S-1-5-21-1626573300-1364474481-487586288-1001}/toto@mycompany.com($b423dcd5)/0/Inbox/가가가가곕갘객겒갨겑곓걌게겻겨곹곒갓곅갩갤가갠가

我遇到的问题是使用此URL在Outlook中从Java打开实际项目。如果我在Windows的“运行”对话框中复制/粘贴它,则它可以工作;如果我在命令行中使用“开始”后跟复制/粘贴的网址,它也可以使用。

该网址似乎采用UTF-16编码。我希望能够编写这样的代码:

String url = "mapi://{S-1-5-21-1626573300-1364474481-487586288-1001}/toto@mycompany.com($b423dcd5)/0/Inbox/가가가가곕갘객겒갨겑곓걌게겻겨곹곒갓곅갩갤가갠가";

Runtime.getRuntime().exec("cmd.exe /C start " + url);

我不工作,并且尝试了其他解决方案,例如:

String start = "start";
String url = "mapi://{S-1-5-21-1626573300-1364474481-487586288-1001}/toto@mycompany.com($b423dcd5)/0/Inbox/가가가가곕갘객겒갨겑곓걌게겻겨곹곒갓곅갩갤가갠가";

FileOutputStream fos = new FileOutputStream(new File("test.bat");
fos.write(start.getBytes("UTF16");
fos.write(url.getBytes("UTF16"));
fos.close();

Runtime.getRuntime().exec("cmd.exe /C test.bat");

没有任何成功。使用上述解决方案文件“ test.bat”包含正确的url和“ start”命令,但是运行“ test.bat”会导致众所周知的错误消息

'■' is not recognized as an internal or external command, operable program or batch file.

有没有人能从Java中打开“ mapi://”项?


问题答案:

好吧,我的问题有点棘手。但我终于找到了答案,并将在这里分享。

我怀疑是真的:Windows使用UTF-16(小端)网址。当我们仅使用图像,文本等文件路径时,在UTF-8中工作没有任何区别。但是要能够访问Outlook项目,必须使用UTF-16LE。如果我使用C#进行编码,那将不会有任何问题。但是在Java中,您必须更具创造力。

从Windows桌面搜索中,我检索到以下内容:

mapi://{S-1-5-21-1626573300-1364474481-487586288-1001}/toto@mycompany.com($b423dcd5)/0/Inbox/가가가가곕갘객겒갨겑곓걌게겻겨곹곒갓곅갩갤가갠가

我所做的就是创建一个临时的VB脚本并像这样运行它:

/**
 * Opens a set of items using the given set of paths.
 */
public static void openItems(List<String> urls) {
  try {

    // Create VB script
    String script =
      "Sub Run(ByVal sFile)\n" +
      "Dim shell\n" +
      "Set shell = CreateObject(\"WScript.Shell\")\n" +
      "shell.Run Chr(34) & sFile & Chr(34), 1, False\n" +
      "Set shell = Nothing\n" +
      "End Sub\n";

    File file = new File("openitems.vbs");

    // Format all urls before writing and add a line for each given url
    String urlsString = "";
    for (String url : urls) {
      if (url.startsWith("file:")) {
        url = url.substring(5);
      }
      urlsString += "Run \"" + url + "\"\n";
    }

    // Write UTF-16LE bytes in openitems.vbs
    FileOutputStream fos = new FileOutputStream(file);
    fos.write(script.getBytes("UTF-16LE"));
    fos.write(urlsString.getBytes("UTF-16LE"));
    fos.close();

    // Run vbs file
    Runtime.getRuntime().exec("cmd.exe /C openitems.vbs");

  } catch(Exception e){}
}


 类似资料:
  • 问题内容: 嗨,我对angularjs和chrome有问题,这是代码: 如果我用Opera,Firefox或safary打开index.html,则没有任何问题,但如果我用Chorme打开,则不能运行routerprovider,并在控制台中显示如下错误消息: XMLHttpRequest无法加载file://localhost/Users/multivideo/Desktop/FTL- Angu

  • 嗨,我对angularjs和chrome有问题,代码如下: 如果我打开索引。使用Opera、Firefox或safary的html我没有任何问题,但是如果我使用Chorme打开此文件,请不要使用routerprovider,并在控制台中显示错误消息,如下所示: 无法加载XMLHttpRequestfile://localhost/Users/multivideo/Desktop/FTL-Angul

  • 我想用Java从我的公司Outlook帐户发送邮件。但它说邮箱无法访问。我试过各种解决方案,比如更改主机名,但还是不行。错误保持不变。请对此提出任何解决方案。下面是我面临的错误片段。注意:我使用javax mail来实现这个目的。

  • 本文向大家介绍Java通过exchange协议发送邮件,包括了Java通过exchange协议发送邮件的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了Java通过exchange协议发送邮件的具体代码,供大家参考,具体内容如下 pom.xml 导入包 application.properties 配置信息 代码 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊

  • 问题内容: 我有一个脚本,自动创建和发送电子邮件使用 简单功能如下: 但是如何在Outlook窗口中打开这封电子邮件,以便手动打开 编辑并发送? 理想情况下,我喜欢这样: 问题答案: Call instead of

  • 信号的传输总要符合一定的协议(protocol)。比如说长城上放狼烟,是因为人们已经预先设定好狼烟这个物理信号代表了“敌人入侵”这一抽象信号。这样一个“狼烟=敌人入侵”就是一个简单的协议。协议可以更复杂,比如摩尔斯码(Morse Code),使用短信号和长信号的组合,来代表不同的英文字母。比如SOS(***---***, *代表短信号,-代表长信号)。这样"***= S, ---=O"就是摩尔斯码