如何使用EWS Powershell发送带有自定义投票选项的电子邮件

时间:2018-01-02 15:23:38

标签: powershell powershell-v2.0 exchangewebservices powershell-v3.0

它将发送包含Approve and Reject投票选项的电子邮件。但我想发送Yes and No或我自己的自定义选项。我试过改变动词流但没有运气。

这是我的PowerShell代码:

$SentTo = "abc@xyz.com"
$username="abc1"
$password="abc1"

$VerbSetting = "" | Select DisableReplyAll,DisableReply,DisableForward,DisableReplyToFolder
$VerbSetting.DisableReplyAll = $false
$VerbSetting.DisableReply = $false
$VerbSetting.DisableForward = $false
$VerbSetting.DisableReplyToFolder = $false
Import-Module -Name 'C:\Program Files\Microsoft\Exchange\Web Services\2.0\Microsoft.Exchange.WebServices.dll'

## Create Exchange Service Object
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService -ArgumentList Exchange2010

$service.Credentials = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials -ArgumentList  $username, $password

$Provider=New-Object Microsoft.CSharp.CSharpCodeProvider
$Compiler=$Provider.CreateCompiler()
$Params=New-Object System.CodeDom.Compiler.CompilerParameters
$Params.GenerateExecutable=$False
$Params.GenerateInMemory=$True
$Params.IncludeDebugInformation=$False
$Params.ReferencedAssemblies.Add("System.DLL") | Out-Null

$TASource=@'
  namespace Local.ToolkitExtensions.Net.CertificatePolicy{
    public class TrustAll : System.Net.ICertificatePolicy {
      public TrustAll() { 
      }
      public bool CheckValidationResult(System.Net.ServicePoint sp,
        System.Security.Cryptography.X509Certificates.X509Certificate cert, 
        System.Net.WebRequest req, int problem) {
        return true;
      }
    }
  }
'@
$TAResults=$Provider.CompileAssemblyFromSource($Params,$TASource)
$TAAssembly=$TAResults.CompiledAssembly

## We now create an instance of the TrustAll and attach it to the ServicePointManager
$TrustAll=$TAAssembly.CreateInstance("Local.ToolkitExtensions.Net.CertificatePolicy.TrustAll")
[System.Net.ServicePointManager]::CertificatePolicy=$TrustAll

$uri=[system.URI] "https://web.xyz.com/EWS/Exchange.asmx"  
$service.Url = $uri    


function Get-VerbStream{  
    param (  
            $VerbSettings = "$( throw 'VerbSettings is a mandatory Parameter' )"  
          )  
    process{  

 $Header = "02010600000000000000"
 $ReplyToAllHeader = "055265706C790849504D2E4E6F7465074D657373616765025245050000000000000000"
 $ReplyToAllFooter = "0000000000000002000000660000000200000001000000"
 $ReplyToHeader = "0C5265706C7920746F20416C6C0849504D2E4E6F7465074D657373616765025245050000000000000000"
 $ReplyToFooter = "0000000000000002000000670000000300000002000000"
 $ForwardHeader = "07466F72776172640849504D2E4E6F7465074D657373616765024657050000000000000000"
 $ForwardFooter = "0000000000000002000000680000000400000003000000"
 $ReplyToFolderHeader = "0F5265706C7920746F20466F6C6465720849504D2E506F737404506F737400050000000000000000"
 $ReplyToFolderFooter = "00000000000000020000006C00000008000000"
 $ApproveOption = "0400000007417070726F76650849504D2E4E6F74650007417070726F766500000000000000000001000000020000000200000001000000FFFFFFFF"
 $RejectOption= "040000000652656A6563740849504D2E4E6F7465000652656A65637400000000000000000001000000020000000200000002000000FFFFFFFF"
        $VoteOptionExtras = "0401055200650070006C00790002520045000C5200650070006C007900200074006F00200041006C006C0002520045000746006F007200770061007200640002460057000F5200650070006C007900200074006F00200046006F006C00640065007200000741007000700072006F00760065000741007000700072006F007600650006520065006A0065006300740006520065006A00650063007400"
 if($VerbSetting.DisableReplyAll){
  $DisableReplyAllVal = "00"
 }
 else{
  $DisableReplyAllVal = "01"
 }
 if($VerbSetting.DisableReply){
  $DisableReplyVal = "00"
 }
 else{
  $DisableReplyVal = "01"
 }
 if($VerbSetting.DisableForward){
  $DisableForwardVal = "00"
 }
 else{
  $DisableForwardVal = "01"
 }
 if($VerbSetting.DisableReplyToFolder){
  $DisableReplyToFolderVal = "00"
 }
 else{
  $DisableReplyToFolderVal = "01"
 }
 $VerbValue = $Header + $ReplyToAllHeader + $DisableReplyAllVal + $ReplyToAllFooter + $ReplyToHeader + $DisableReplyVal +$ReplyToFooter + $ForwardHeader + $DisableForwardVal + $ForwardFooter + $ReplyToFolderHeader + $DisableReplyToFolderVal + $ReplyToFolderFooter + $ApproveOption  + $RejectOption + $VoteOptionExtras   
 return $VerbValue
 } 
 }


function hex2binarray($hexString){
    $i = 0
    [byte[]]$binarray = @()
    while($i -le $hexString.length - 2){
        $strHexBit = ($hexString.substring($i,2))
        $binarray += [byte]([Convert]::ToInt32($strHexBit,16))
        $i = $i + 2
    }
    return ,$binarray
}



$VerbStreamProp = new-object Microsoft.Exchange.WebServices.Data.ExtendedPropertyDefinition([Microsoft.Exchange.WebServices.Data.DefaultExtendedPropertySet]::Common,0x8520, [Microsoft.Exchange.WebServices.Data.MapiPropertyType]::Binary)

$VerbSettingValue = get-VerbStream $VerbSetting

$EmailMessage = New-Object Microsoft.Exchange.WebServices.Data.EmailMessage -ArgumentList $service 
$EmailMessage.Subject = "Message Subject"  
#Add Recipients    
$EmailMessage.ToRecipients.Add($SentTo)
$EmailMessage.Body = New-Object Microsoft.Exchange.WebServices.Data.MessageBody
$EmailMessage.Body.BodyType = [Microsoft.Exchange.WebServices.Data.BodyType]::HTML
$EmailMessage.Body.Text = "Body" 
$EmailMessage.SetExtendedProperty($VerbStreamProp,(hex2binarray $VerbSettingValue))
$EmailMessage.SendAndSaveCopy()

1 个答案:

答案 0 :(得分:3)

当您使用其他人的代码时,请务必在代码中注明它,以便任何查看它的人都可以知道背景。如果你按照以下方式使用它,以下应该可以正常工作

class UserGroupViewTestSuite(BareSetupClass):

@classmethod
def setUpTestData(cls):
    super(UserGroupViewTestSuite, cls).setUpTestData()

    cls.user = Client()
    cls.user.login(username="test_user@test.com", password="password")

模块

$Verbs = @()
$Verbs += "Yes"
$Verbs += "No"
$Verbs += "Other Option"

Send-VoteMail -MailboxName mailbox@domain.com -To user@domain.com -Subject "test Vote" -Verbs $Verbs