【问题标题】:Need to open ms outlook with attachments [duplicate]需要打开带有附件的ms Outlook [重复]
【发布时间】:2016-08-14 14:54:00
【问题描述】:

我需要用java实现下面的逻辑。

--> 当我点击一个按钮时,MS Outlook 需要用 To、CC、Subject 和附件打开。

我们可以使用 mailto 来执行此操作,但如果我们使用 mailto,我们将无法添加附件。

我需要将共享文件夹中的多个附件添加到 MS Outlook 中

请帮帮我。

使用 switch 可以有单个附件,但我需要打开带有 2+ 个附件的 Outlook,并且发送按钮应该可用,以便用户可以发送邮件

【问题讨论】:

标签: java jakarta-mail mailto


【解决方案1】:

使用 JavaMail 创建包含收件人、抄送、主题和附件的多部分 mime 消息。然后代替传输消息调用saveChangeswriteTo 并将电子邮件存储到文件系统。

有一个undocumented/eml开关可以用来打开MIME标准格式。例如,outlook /eml filename.eml 有一个记录在案的 /f 开关将打开 msg 文件。例如outlook /f filename.msg x-unsent 可用于切换发送按钮。

下面是一个让您入门的示例:

public static void main(String[] args) throws Exception {
    //Create message envelope.
    MimeMessage msg = new MimeMessage((Session) null);
    msg.addFrom(InternetAddress.parse("you@foo.com"));
    msg.setRecipients(Message.RecipientType.TO,
            InternetAddress.parse("support@bar.com"));
    msg.setRecipients(Message.RecipientType.CC,
            InternetAddress.parse("manager@baz.com"));
    msg.setSubject("Hello Outlook");
    //msg.setHeader("X-Unsent", "1");

    MimeMultipart mmp = new MimeMultipart();
    MimeBodyPart body = new MimeBodyPart();
    body.setDisposition(MimePart.INLINE);
    body.setContent("This is the body", "text/plain");
    mmp.addBodyPart(body);

    MimeBodyPart att = new MimeBodyPart();
    att.attachFile("c:\\path to file.attachment");
    mmp.addBodyPart(att);

    msg.setContent(mmp);
    msg.saveChanges();


    File resultEmail = File.createTempFile("test", ".eml");
    try (FileOutputStream fs = new FileOutputStream(resultEmail)) {
        msg.writeTo(fs);
        fs.flush();
        fs.getFD().sync();
    }

    System.out.println(resultEmail.getCanonicalPath());

    ProcessBuilder pb = new ProcessBuilder();
    pb.command("cmd.exe", "/C", "start", "outlook.exe",
            "/eml", resultEmail.getCanonicalPath());
    Process p = pb.start();
    try {
        p.waitFor();
    } finally {
        p.getErrorStream().close();
        p.getInputStream().close();
        p.getErrorStream().close();
        p.destroy();
    }
}

您必须在电子邮件客户端关闭后进行清理。

您还必须考虑电子邮件留在文件系统上的安全隐患。

【讨论】:

  • 能否提供示例代码
  • 仅当您承诺阅读JAVAMAIL API FAQ 并保持您的JavaMail 是最新的。在这里签名:
  • 谢谢你的代码。但我一次添加了多个附件
  • @Thomas 将其视为一种练习,代码中有足够多的提示。
  • 它对我有用。但我需要使用发送选项打开 Outlook。
猜你喜欢
  • 1970-01-01
  • 2019-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
相关资源
最近更新 更多