2017-10-04 98 views
0

我正在使用PowerShell脚本将邮件发送到一个帐户,但要将replyto地址设置为某个其他电子邮件地址。在PowerShell中设置ReplyTo在EWS中的电子邮件地址

$eMail = New-Object -TypeName Microsoft.Exchange.WebServices.Data.EmailMessage -ArgumentList $exchService 
$PidTagReplyRecipientEntries = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x004F,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::String); 
$PidTagReplyRecipientNames = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x0050,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::String); 
$eMail.SetExtendedProperty($PidTagReplyRecipientEntries,$ReplyTo); 
      $eMail.SetExtendedProperty($PidTagReplyRecipientNames,"RajniKant"); 

直到现在我已经使用了这个,但它不工作。

Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition 我也想知道上面的构造函数中的第一个参数是什么以及在哪里可以找到它。 代码参考:set reply-to address in outgoing email EWS

+1

它不工作?你是否收到错误? – ShanayL

+0

投掷: “ErrorMessage”:“异常调用\”SendAndSaveCopy \“与\”0 \“参数:\”扩展属性属性组合无效。 发送邮件。 – Abhi619

回答

0

我已经由我自己解决了它与在上文所提链路代码已经改变了位与Powershell的使用方法:

function LoadExtendedHexStrClass(){ 
$MyCode = @" 
using System; 
using System.Globalization; 
using System.Text; 


namespace ExtProp 
{ 
public class BinaryConfig 
{ 
    public static String GenerateFlatList(String SMTPAddress, String DisplayName, String ProviderName) 
    { 
     String abCount = "01000000"; 
     String AddressId = GenerateOneOff(SMTPAddress, DisplayName,ProviderName); 
     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 ProviderName) 
    { 
     String Flags = "00000000"; 
     String ProviderNameHex = BitConverter.ToString(UnicodeEncoding.Unicode.GetBytes(ProviderName)).Replace("-", ""); 
     String ProviderUid = ProviderNameHex; 
     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; 
    } 
    public 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; 
    } 
} 
"@ 

Add-Type -TypeDefinition $MyCode -Language CSharp 
} 

并如下使用它:

$eMail = New-Object -TypeName Microsoft.Exchange.WebServices.Data.EmailMessage -ArgumentList $exchService 
if($ReplyTo -ne ""){ 
      LoadExtendedHexStrClass 
      $UserProperties=Get-kUserProfileProperties $ReplyTo 
      $DisplayName =$UserProperties.PreferredName 
      $FlatList= [ExtProp.BinaryConfig]::GenerateFlatList($ReplyTo,$DisplayName, $CurrentUserEmail); 

      $PidTagReplyRecipientEntries = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x004F,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::Binary); 
      $PidTagReplyRecipientNames = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition(0x0050,[Microsoft.Exchange.WebServices.Data.MapiPropertyType]::String); 
      $eMail.SetExtendedProperty($PidTagReplyRecipientEntries,[ExtProp.BinaryConfig]::ConvertHexStringToByteArray($FlatList)); 
      $eMail.SetExtendedProperty($PidTagReplyRecipientNames,$DisplayName); 
     } 
     $eMail.SendAndSaveCopy()  

这里$ ReplyTo是我想要发送回复电子邮件的用户的电子邮件地址。

相关问题