Skip to main content
 首页 » 编程设计

c#之在外发电子邮件 EWS 中设置回复地址

2024年05月06日34zhoujg

运行 Exchange 2013

我在从服务帐户发送电子邮件的 c# 服务中使用 EWS。

我想让电子邮件有一个不同于发送帐户的回复地址,一个分发列表地址。

我该怎么做? EmailMessage.ReplyTo 字段是只读的。

代码:

ExchangeService service = new ExchangeService(); 
service.Credentials = EWScredentials; 
service.Url = new Uri(string.Format("https://{0}/EWS/Exchange.asmx", ExchangePath)); 
 
EmailMessage message = new EmailMessage(service); 
message.ToRecipients.AddRange(receipients); 
 
//This didn't work 
message.ReplyTo.Clear(); 
message.ReplyTo.Add(replyToAddress); 
 
message.Subject = subject; 
message.Body = html; 
message.SendAndSaveCopy(); 

虽然我没有使用 powershell,但只有其他似乎相关的线程:How do you set a message Reply-To address using EWS Managed API?

请您参考如下方法:

您可以使用 PidTagReplyRecipientEntries 扩展属性 https://msdn.microsoft.com/en-us/library/office/cc815710.aspx这样做例如

        EmailMessage DifferentReplyTo = new EmailMessage(service); 
        DifferentReplyTo.Subject = "test"; 
        DifferentReplyTo.ToRecipients.Add("destination@domain.com"); 
        DifferentReplyTo.Body = new MessageBody("test");            
        ExtendedPropertyDefinition PidTagReplyRecipientEntries = new ExtendedPropertyDefinition(0x004F, MapiPropertyType.Binary); 
        ExtendedPropertyDefinition PidTagReplyRecipientNames = new ExtendedPropertyDefinition(0x0050, MapiPropertyType.String); 
        DifferentReplyTo.SetExtendedProperty(PidTagReplyRecipientEntries, ConvertHexStringToByteArray(GenerateFlatList("departmentdg@domain.com", "jc"))); 
        DifferentReplyTo.SetExtendedProperty(PidTagReplyRecipientNames, "jc"); 
        DifferentReplyTo.SendAndSaveCopy(); 
 
    internal static String GenerateFlatList(String SMTPAddress, String DisplayName) 
    { 
        String abCount = "01000000"; 
        String AddressId = GenerateOneOff(SMTPAddress, DisplayName); 
        return abCount + BitConverter.ToString(INT2LE((AddressId.Length / 2) + 4)).Replace("-", "") + BitConverter.ToString(INT2LE(AddressId.Length / 2)).Replace("-", "") + AddressId; 
    } 
 
    internal static String GenerateOneOff(String SMTPAddress,String DisplayName) 
    { 
        String Flags = "00000000"; 
        String ProviderUid = "812B1FA4BEA310199D6E00DD010F5402"; 
        String Version = "0000"; 
        String xFlags = "0190"; 
        String DisplayNameHex = BitConverter.ToString(UnicodeEncoding.Unicode.GetBytes(DisplayName + "\0")).Replace("-",""); 
        String SMTPAddressHex = BitConverter.ToString(UnicodeEncoding.Unicode.GetBytes(SMTPAddress + "\0")).Replace("-", ""); 
        String AddressType = BitConverter.ToString(UnicodeEncoding.Unicode.GetBytes("SMTP" + "\0")).Replace("-", ""); 
        return Flags + ProviderUid + Version + xFlags + DisplayNameHex + AddressType + SMTPAddressHex; 
    } 
    internal static byte[] INT2LE(int data) 
    { 
        byte[] b = new byte[4]; 
        b[0] = (byte)data; 
        b[1] = (byte)(((uint)data >> 8) & 0xFF); 
        b[2] = (byte)(((uint)data >> 16) & 0xFF); 
        b[3] = (byte)(((uint)data >> 24) & 0xFF); 
        return b; 
    } 
    internal static byte[] ConvertHexStringToByteArray(string hexString) 
    { 
        if (hexString.Length % 2 != 0) 
        { 
            throw new ArgumentException(String.Format(CultureInfo.InvariantCulture, "The binary key cannot have an odd number of digits: {0}", hexString)); 
        } 
 
        byte[] HexAsBytes = new byte[hexString.Length / 2]; 
        for (int index = 0; index < HexAsBytes.Length; index++) 
        { 
            string byteValue = hexString.Substring(index * 2, 2); 
            HexAsBytes[index] = byte.Parse(byteValue, NumberStyles.HexNumber, CultureInfo.InvariantCulture); 
        } 
 
        return HexAsBytes; 
    } 

干杯 格伦