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

通过EWS API发送高优先级邮件遇编译错误及程序集缺失问题求助

使用EWS API发送高优先级邮件时遇到编译错误及程序集缺失问题

问题背景

尝试通过EWS API发送标记为高优先级的邮件,目前遇到多个编译错误及程序集缺失问题。使用的命名空间如下:

  • System
  • System.Drawing
  • System.Data
  • Microsoft.Exchange.WebServices.Data
  • System.Collections.Generic
  • System.Web
  • System.Text
  • System.IO
  • System.Linq

已查阅EWS API相关文档,知晓Importance是枚举类型,但不确定正确的设置方式,尝试过email.Importance = 2这类写法,出现枚举转换错误。当前代码如下:

Success = true;
ErrorMessage = "";
try {
if (To == "" && CC == "" && BCC == "") {
    throw new Exception("Recipients was not provided");
}
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
string serviceUrl = "https://mail.mydomain.com/ews/exchange.asmx";
service.Url = new Uri(serviceUrl);

EmailMessage email = new EmailMessage(service);
email.Subject = Subject;
if (isHTML) {
    email.Body = new MessageBody(BodyType.HTML, Message);
} else {
    email.Body = new MessageBody(BodyType.Text, Message);
}
if (isHighImportance) {
    email.Importance = new ImportantChoiceType(HIGH);
} else {
    email.Importance = new ImportantChoiceType(NORMAL);
}   
char[] splitComma =  new char[]{','};
char[] splitAsterisk =  new char[]{'*'};
char[] splitSemicolon =  new char[]{';'};
char[] splitAny =  new char[]{',',';'};

//To
foreach (String r in To.Split(splitAny, StringSplitOptions.RemoveEmptyEntries))
{
    email.ToRecipients.Add(r.Trim());
}
//CC
foreach (String r in CC.Split(splitAny, StringSplitOptions.RemoveEmptyEntries)) 
{
    email.CcRecipients.Add(r.Trim());
}
//BCC
foreach (String r in BCC.Split(splitAny, StringSplitOptions.RemoveEmptyEntries)) 
{
    email.BccRecipients.Add(r.Trim());
}

//SaveDraft
email.Save(SearchFolderByName(service,"Drafts",mailbox));

// Add attachments
foreach (String att in Attachments.Split(splitSemicolon, StringSplitOptions.RemoveEmptyEntries)) 
{
    if (att.Contains(new string(splitAsterisk))) {
        String[] attArray = att.Split(splitAsterisk, StringSplitOptions.RemoveEmptyEntries);
        FileAttachment fileatt = email.Attachments.AddFileAttachment(attArray[0]);
        fileatt.IsInline = true;
        fileatt.ContentId = attArray[1];
    } else {
        email.Attachments.AddFileAttachment(att);
    }
}

//Send
if (SaveSent) 
{
    email.SendAndSaveCopy(SearchFolderByName(service,"SentItems",mailbox));
} else {
    email.Send();
}
}
catch (Exception e) 
{
Success = false;
ErrorMessage = e.ToString();
}

问题分析与解决方案

1. 优先级设置错误

代码中ImportantChoiceType是错误类型,EWS API里EmailMessage.Importance属性对应Microsoft.Exchange.WebServices.Data.Importance枚举,无需实例化类型,直接用枚举值即可:

if (isHighImportance) {
    email.Importance = Importance.High;
} else {
    email.Importance = Importance.Normal;
}

2. 程序集引用检查

确保项目已正确引用Microsoft.Exchange.WebServices:

  • 用NuGet的话,安装对应版本的Microsoft.Exchange.WebServices包(版本要匹配Exchange服务器版本)
  • 手动引用的话,确认Microsoft.Exchange.WebServices.dll已添加到项目引用中

3. 其他潜在问题修正

  • SearchFolderByName需确保返回正确的FolderId类型,否则会导致Save/SendAndSaveCopy报错
  • 收件人分割逻辑可简化,无需定义多个字符数组,直接用new char[]{',', ';'}
  • att.Contains(new string(splitAsterisk))可简化为att.Contains('*'),避免不必要的字符串实例化
  • 添加附件时增加数组长度判断,避免索引越界

修正后的完整代码:

Success = true;
ErrorMessage = "";
try {
    if (string.IsNullOrWhiteSpace(To) && string.IsNullOrWhiteSpace(CC) && string.IsNullOrWhiteSpace(BCC)) {
        throw new Exception("未提供收件人");
    }
    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
    string serviceUrl = "https://mail.mydomain.com/ews/exchange.asmx";
    service.Url = new Uri(serviceUrl);

    EmailMessage email = new EmailMessage(service);
    email.Subject = Subject;
    email.Body = isHTML ? new MessageBody(BodyType.HTML, Message) : new MessageBody(BodyType.Text, Message);
    
    // 修正优先级设置
    email.Importance = isHighImportance ? Importance.High : Importance.Normal;

    char[] splitSeparators = new char[]{',', ';'};

    // 添加收件人
    foreach (string r in To.Split(splitSeparators, StringSplitOptions.RemoveEmptyEntries))
    {
        email.ToRecipients.Add(r.Trim());
    }
    foreach (string r in CC.Split(splitSeparators, StringSplitOptions.RemoveEmptyEntries)) 
    {
        email.CcRecipients.Add(r.Trim());
    }
    foreach (string r in BCC.Split(splitSeparators, StringSplitOptions.RemoveEmptyEntries)) 
    {
        email.BccRecipients.Add(r.Trim());
    }

    // 保存草稿
    email.Save(SearchFolderByName(service, "Drafts", mailbox));

    // 添加附件
    foreach (string att in Attachments.Split(';', StringSplitOptions.RemoveEmptyEntries)) 
    {
        if (att.Contains('*')) {
            string[] attArray = att.Split('*', StringSplitOptions.RemoveEmptyEntries);
            if (attArray.Length >= 2) {
                FileAttachment fileatt = email.Attachments.AddFileAttachment(attArray[0]);
                fileatt.IsInline = true;
                fileatt.ContentId = attArray[1];
            }
        } else {
            email.Attachments.AddFileAttachment(att);
        }
    }

    // 发送邮件
    if (SaveSent) 
    {
        email.SendAndSaveCopy(SearchFolderByName(service, "SentItems", mailbox));
    } else {
        email.Send();
    }
}
catch (Exception e) 
{
    Success = false;
    ErrorMessage = e.ToString();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 07:50:29