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

如何通过.NET Framework/C#与新版Windows Outlook应用实现交互?

针对新版Windows Outlook的交互方案(.NET Framework 4.8 C#)

方法1:使用mailto协议(最简单,无需额外权限)

mailto是系统级协议,会自动调用默认邮件客户端(包括新版Outlook),可快速填充收件人、主题、正文等信息,实现旧版COM互操作中打开邮件对话框的核心效果。

示例代码:

using System.Diagnostics;
using System.Web; // 需要引用System.Web程序集

try
{
    // 构造mailto链接,对特殊字符编码避免解析错误
    string to = "recipient@example.com";
    string subject = "测试邮件主题";
    string body = "这是邮件正文内容\n换行测试";
    
    string encodedSubject = HttpUtility.UrlEncode(subject);
    string encodedBody = HttpUtility.UrlEncode(body);
    
    string mailtoUrl = $"mailto:{to}?subject={encodedSubject}&body={encodedBody}";
    
    Process.Start(new ProcessStartInfo(mailtoUrl)
    {
        UseShellExecute = true // 必须开启,确保系统正确处理协议
    });
}
catch (Exception ex)
{
    // 处理异常,比如无默认邮件客户端的情况
    MessageBox.Show($"无法唤起邮件客户端:{ex.Message}");
}

方法2:使用Outlook Deep Links(精准唤起新版Outlook)

新版Windows Outlook支持专用的deep link协议,可直接定位到撰写窗口,比mailto更精准,确保唤起的是Outlook而非其他邮件客户端。

常用撰写窗口deep link格式:outlook://compose?to=<收件人>&subject=<主题>&body=<正文>

示例代码:

using System.Diagnostics;
using System.Web;

try
{
    string to = "team@example.com";
    string subject = "项目进度汇报";
    string body = "请查看附件中的进度文档。";
    
    string encodedSubject = HttpUtility.UrlEncode(subject);
    string encodedBody = HttpUtility.UrlEncode(body);
    
    string outlookDeepLink = $"outlook://compose?to={to}&subject={encodedSubject}&body={encodedBody}";
    
    Process.Start(new ProcessStartInfo(outlookDeepLink)
    {
        UseShellExecute = true
    });
}
catch (Exception ex)
{
    MessageBox.Show($"无法唤起Outlook:{ex.Message}");
}

提示:若用户未安装新版Outlook,该链接可能无法识别,建议增加 fallback 逻辑,当调用失败时切换到mailto协议。

方法3:使用Microsoft Graph API(复杂交互场景)

如果需要更深度的交互(比如自动发送邮件、读取收件箱、管理日历等),可使用Microsoft Graph API。该方案需用户通过OAuth2.0授权,适合企业级应用。

核心步骤:

  1. 在Azure AD注册应用,获取客户端ID及所需权限(如Mail.Send、Mail.ReadWrite)。
  2. 安装兼容.NET Framework 4.8的Microsoft.Graph和Microsoft.Identity.Client NuGet包。

示例:创建邮件草稿并唤起Outlook编辑窗口

using Microsoft.Graph;
using Microsoft.Identity.Client;
using System.Threading.Tasks;
using System.Windows.Forms; // WinForms环境,WPF需替换为对应弹窗组件

// 异步方法,WinForms/WPF中需配合async/await使用
private async Task ComposeEmailWithGraph()
{
    string clientId = "你的Azure AD应用客户端ID";
    string[] scopes = new[] { "Mail.ReadWrite" };
    
    var pca = PublicClientApplicationBuilder
        .Create(clientId)
        .WithRedirectUri("http://localhost") // 桌面应用默认重定向URI
        .Build();
    
    // 获取用户授权令牌
    var result = await pca.AcquireTokenInteractive(scopes).ExecuteAsync();
    
    // 初始化Graph客户端
    var graphClient = new GraphServiceClient(new DelegateAuthenticationProvider((requestMessage) =>
    {
        requestMessage.Headers.Authorization = new System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", result.AccessToken);
        return Task.CompletedTask;
    }));
    
    // 创建邮件草稿
    var draftMessage = new Message
    {
        Subject = "Graph API测试邮件",
        Body = new ItemBody
        {
            ContentType = BodyType.Text,
            Content = "这是通过Graph API创建的草稿邮件"
        },
        ToRecipients = new List<Recipient>
        {
            new Recipient
            {
                EmailAddress = new EmailAddress
                {
                    Address = "user@example.com"
                }
            }
        }
    };
    
    var savedDraft = await graphClient.Me.Messages.Request().AddAsync(draftMessage);
    
    // 生成deep link唤起Outlook编辑草稿
    string editLink = $"outlook://message/{savedDraft.Id}/edit";
    Process.Start(new ProcessStartInfo(editLink) { UseShellExecute = true });
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 12:25:32