c# - 从 SharedMailbox 中检索别名
问题描述
我想检索已通过电子邮件发送到共享邮箱的别名电子邮件,但 Exchange 使用共享邮箱的主要电子邮件地址覆盖了“收件人”
示例 - “aa@alias.co.uk” 别名通过共享邮箱通过电子邮件发送。我想检索“aa@alias.co.uk”电子邮件
PrimaryEmail - aa@primarydomain.co.uk
别名电子邮件 - aa@alias.co.uk
我曾尝试访问电子邮件的标题,但没有运气
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Microsoft.Exchange.WebServices.Data;
namespace readSharedMailbox
{
class Program
{
static void Main(string[] args)
{
ExchangeService _service;
try
{
Console.WriteLine("Registering Exchange connection");
_service = new ExchangeService
{
Credentials = new WebCredentials("*******", "********")
};
}
catch
{
Console.WriteLine("new ExchangeService failed. Press enter to exit:");
return;
}
// Office365 webservice URL
_service.Url = new Uri("https://outlook.office365.com/EWS/Exchange.asmx");
try
{
Console.WriteLine("Reading mail");
FindItemsResults<Item> result = _service.FindItems(WellKnownFolderName.Inbox, new ItemView(1));
foreach (Item item in result)
{
EmailMessage message = EmailMessage.Bind(_service, item.Id);
Console.WriteLine("Reading items");
Console.WriteLine(message.ToRecipients[0].Address.ToString());
/* Reading the Header
foreach (var property in message.InternetMessageHeaders)
{
Console.WriteLine(property.Name);
Console.WriteLine(property.Value);
}
*/
}
Console.WriteLine("Exiting");
Console.ReadLine();
}
catch (Exception e)
{
Console.WriteLine("An error has occured. \n:" + e.Message);
}
}
}
}
解决方案
Exchange 始终将发件人和收件人解析为其 GAL 对象 - 您不再拥有一次性 SMTP 条目,而是拥有 GAL 对象。检索PR_TRANSPORT_MESSAGE_HEADERS
属性(DASL 名称http://schemas.microsoft.com/mapi/proptag/0x007D001F
)并手动解析 To/CC 标头是查看邮件发送到的原始 SMTP 地址的唯一方法。但即便如此,我也看到了 MIME 标头被 Exchange 破坏并且不再包含 SMTP 地址,而只是显示名称的情况。
推荐阅读
- php - PHP Strip_Tags 仅调用数组中的第一项
- flutter - Flutter run -d all 不会启动 chrome
- wordpress - 如果用户不拥有目录,如何通过 git 远程推送更新 Wordpress 文件?
- azure-devops - 安装 SSH 密钥任务在作业后阶段失败
- azurekinect - 获取 FaceModel - Azure Kinect
- mongodb - brew install mongo 在 ubuntu 18.04 中不起作用
- react-native - 反应导航 - “未定义不是一个对象(评估'Component.router.getStateForAction')”
- spring - Spring Boot 2.2 和设置 HTTPS。为什么需要两个密码
- jquery - 如何使用 jQuery 选择器定位所有匹配的元素?
- windows - Perl:Windows 中文件名的元音变音问题