使用Mailkit接收邮件时From字段显示特殊字符,如何获取正常邮箱地址?
解决Outlook邮件From字段返回IMCEAEX特殊字符串的问题
你遇到的IMCEAEX-开头的字符串是Exchange的X.500地址,属于Exchange内部用于识别邮箱的专有格式,当邮件发送给通讯录内的内部联系人时,可能会返回该格式而非标准SMTP邮箱地址。以下是几种获取正常邮箱地址的方法:
方法1:通过Exchange Web Services (EWS) 提取SMTP地址
直接读取邮箱对象的EmailAddresses属性,筛选出SMTP类型的地址即可:var fromMailbox = message.From.Mailboxes.FirstOrDefault(); if (fromMailbox != null) { var smtpAddress = fromMailbox.EmailAddresses .FirstOrDefault(ea => ea.Key == Microsoft.Exchange.WebServices.Data.EmailAddressKey.SmtpAddress)?.Value; }方法2:使用Microsoft Graph API 获取标准地址
如果采用Graph API调用邮件接口,直接请求from/emailAddress/address字段,默认会返回SMTP格式的邮箱地址:var message = await graphClient.Me.Messages[messageId].Request().Select("from").GetAsync(); var smtpAddress = message.From.EmailAddress.Address;方法3:手动解析IMCEAEX字符串(不推荐)
作为临时备选方案,可以对特殊字符串做解码处理,但该方法依赖格式稳定性,Exchange版本更新可能失效:- 截掉开头的
IMCEAEX-和结尾的@xxx.templateTenant部分 - 将
+20替换为空格,+28替换为(,+29替换为) - 按下划线分割内容,提取
CN=RECIPIENTS_CN=后的标识,结合组织信息拼接邮箱地址
- 截掉开头的
优先推荐使用EWS或Graph API的原生属性获取,避免手动解析带来的兼容性问题。
内容的提问来源于stack exchange,提问作者Евгений Иванов
相关产品推荐
相关产品推荐

