通过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
相关产品推荐
相关产品推荐

