2017-10-04 2 views
0

한 계정으로 메일을 보내고 있지만 다른 전자 메일 주소로 replyto 주소를 설정하려는 PowerShell 스크립트를 작성 중입니다.PowerShell의 EWS에있는 ReplyTo 전자 메일 주소 설정

$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": "\"0 \ "인수로 \"SendAndSaveCopy \ "예외 호출 : \"확장 속성 속성 조합이 잘못되었습니다. 메일을 보내는 중. – Abhi619

답변

0

I 자신에 의해 그것을 해결하고 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는 회신 이메일을 보내려는 사용자의 이메일 주소입니다.