You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java创建带HTML格式的Outlook草稿邮件?

解决方案:创建HTML格式的Outlook草稿邮件

一、通过Java调用Outlook COM API实现

Java可以借助Jacob(Java COM Bridge)类库直接对接Outlook的COM接口,生成带HTML内容的草稿邮件,步骤如下:

  1. 引入Jacob依赖(以Maven为例),确保库版本与系统32/64位、JVM位数匹配
  2. 编写核心代码:
import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class OutlookHtmlDraftCreator {
    public static void generateHtmlDraft(String recipient, String mailSubject, String htmlContent) {
        ActiveXComponent outlookApp = new ActiveXComponent("Outlook.Application");
        try {
            // 创建邮件项(0代表邮件类型)
            Dispatch mailItem = outlookApp.getProperty("CreateItem").invoke(new Variant(0)).toDispatch();
            // 设置收件人、主题
            Dispatch.put(mailItem, "To", recipient);
            Dispatch.put(mailItem, "Subject", mailSubject);
            // 写入HTML格式内容
            Dispatch.put(mailItem, "HTMLBody", htmlContent);
            // 保存为草稿
            Dispatch.call(mailItem, "Save");
            // 可选:直接打开草稿邮件
            Dispatch.call(mailItem, "Display");
        } finally {
            outlookApp.safeRelease();
        }
    }

    public static void main(String[] args) {
        String htmlBody = "<h1>物料筛选结果</h1><p>本次筛选出以下物料:</p><ul><li>高强度钢材</li><li>绝缘橡胶垫</li></ul>";
        generateHtmlDraft("email@gmail.com", "作业物料清单", htmlBody);
    }
}

注意:该方案要求客户端必须安装Outlook,且Jacob库需对应系统架构配置

二、Java调用PowerShell脚本间接实现

如果不想引入COM类库,可通过Java调用本地PowerShell脚本,利用Outlook的COM对象生成HTML草稿:

  1. 编写PowerShell脚本(命名为CreateOutlookDraft.ps1):
param(
    [string]$Recipient,
    [string]$Subject,
    [string]$HtmlContent
)

$outlookInstance = New-Object -ComObject Outlook.Application
$mailItem = $outlookInstance.CreateItem(0)
$mailItem.To = $Recipient
$mailItem.Subject = $Subject
$mailItem.HTMLBody = $HtmlContent
$mailItem.Save()
$mailItem.Display()
# 释放COM对象避免内存泄漏
[System.Runtime.Interopservices.Marshal]::ReleaseComObject($outlookInstance) | Out-Null
  1. Java中调用脚本的代码:
import java.io.IOException;

public class PowerShellDraftCaller {
    public static void createDraft(String to, String subject, String html) throws IOException {
        ProcessBuilder processBuilder = new ProcessBuilder(
            "powershell.exe",
            "-ExecutionPolicy", "Bypass",
            "-File", "CreateOutlookDraft.ps1",
            "-Recipient", to,
            "-Subject", subject,
            "-HtmlContent", html
        );
        processBuilder.start();
    }

    public static void main(String[] args) throws IOException {
        String htmlContent = "<h2>物料明细</h2><table border='1'><tr><th>物料编号</th><th>规格</th></tr><tr><td>WL-001</td><td>φ10mm</td></tr></table>";
        createDraft("email@gmail.com", "筛选结果通知", htmlContent);
    }
}

优势:无需额外Java依赖,仅依赖系统自带PowerShell和Outlook;需确保用户有脚本执行权限,且脚本路径配置正确

三、关于原生mailto协议的说明

原生mailto协议仅支持纯文本内容传递,无法实现HTML格式邮件,因此你之前的方法无法满足需求,必须改用上述两种方案。

内容的提问来源于stack exchange,提问作者James Cafferkey

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 20:40:00