2013-06-28 22 views
0

Я использую Powershell и веб-службу Exchange (v1.2) для отправки электронной почты через Office 365. До тех пор, пока я использую свои учетные данные, сценарий может отправлять без проблем. Однако, для отслеживания, при ошибках скрипта мне нужно отправить электронное письмо из общего почтового ящика, а не через мою учетную запись. Ошибка, которую я получаю:Powershell EWS Отправить письмо от общего почтового ящика

Exception calling "AutodiscoverUrl" with "2" argument(s): "The Autodiscover service couldn't be located." 
At F:\Scripting\1-Dev\Modules\Include.ps1:387 char:31 
+  $service.AutodiscoverUrl <<<< ($Credential.UserName, {$true}) 
    + CategoryInfo   : NotSpecified: (:) [], MethodInvocationException 
    + FullyQualifiedErrorId : DotNetMethodException 

Я уверен, что проблема заключается в аутентификации. Как я могу аутентифицировать и отправлять из общего почтового ящика в o365?

EDIT: Вот код, который я использую для отправки электронной почты:

Function Send-O365Email { 

[CmdletBinding()] 

param(

    [Parameter(Position=1, Mandatory=$true)] 
    [String[]] $To, 

    [Parameter(Position=2, Mandatory=$true)] 
    [String] $Subject, 

    [Parameter(Position=3, Mandatory=$true)] 
    [String] $Body, 

    [Parameter(Position=4, Mandatory=$true)] 
    [System.Management.Automation.PSCredential] $Credential, 

    [Parameter(Mandatory=$false)] 
    [String]$PathToAttachment 

) 

begin { 

    #Load the EWS Managed API Assembly 
    Add-Type -Path 'C:\Program Files\Microsoft\Exchange\Web Services\1.2\Microsoft.Exchange.WebServices.dll' 
} 

process { 

    #Create the EWS service object 
    $service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService -ArgumentList Exchange2010_SP1 

    #Set the credentials for Exchange Online 
    $service.Credentials = New-Object Microsoft.Exchange.WebServices.Data.WebCredentials -ArgumentList ` 
    $Credential.UserName, $Credential.GetNetworkCredential().Password 

    #Determine the EWS endpoint using autodiscover 
    $service.AutodiscoverUrl($Credential.UserName, {$true}) 

    #Create the email message and set the Subject and Body 
    $message = New-Object Microsoft.Exchange.WebServices.Data.EmailMessage -ArgumentList $service 
    $message.Subject = $Subject 
    $message.Body = $Body 
    $message.Body.BodyType = 'HTML' 

    if (Test-Path $Attachment) { 
     $message.Attachments.AddFileAttachment("$Attachment"); 
    } 

    #Add each specified recipient 
    $To | ForEach-Object { 
    $null = $message.ToRecipients.Add($_) 
    } 

    #Send the message and save a copy in the users Sent Items folder 
    try { 
     $message.SendAndSaveCopy() 
    } 
    catch [exception] { 
     Add-Content -Path $LOGFILE -Value "$_" 
    } 
} # End Process 

}

+0

Хорошо, можно ли даже отправлять сообщения из общего почтового ящика через EWS? Кто-нибудь знает? – mack

+0

Если вы вручную установите URl, можете ли вы продолжить? Как выглядит ваш код? –

+0

О, и вы используете Microsoft.Exchange.WebServices.dll или New-WebServiceProxy –

ответ

0

Вы можете захотеть попробовать сборку 2.0, хотя я не думаю, что это вопрос http://www.microsoft.com/en-us/download/details.aspx?id=35371

Моя среда немного отличается от того, что наши учетные данные и адрес электронной почты не совпадают. (один из них - [email protected], а другой - [email protected]), поэтому я должен быть немного другим в том, как я подхожу к именам, всегда нуждающимся в имени Credential и MailBox.

Когда я пытаюсь использовать учетную запись Ресурса, я должен использовать свое электронное письмо для автообнаружения. Возможно, потому что учетная запись службы не имеет пользовательской лицензии. Я размышляю.

Я нашел много ресурсов на http://gsexdev.blogspot.com/.

В частности, это может быть то, что вам нужно:

## Optional section for Exchange Impersonation 
# http://msdn.microsoft.com/en-us/library/exchange/dd633680(v=exchg.80).aspx 
$service.ImpersonatedUserId = new-object Microsoft.Exchange.WebServices.Data.ImpersonatedUserId([Microsoft.Exchange.WebServices.Data.ConnectingIdType]::SmtpAddress, "[email protected]") 
#or clear with 
#$service.ImpersonatedUserId = $null 

подобное 'обсуждение' @EWS Managed API: how to set From of email? также.

+0

Привет, Джош. Позвольте мне прочитать информацию по этим ссылкам, и я дам вам знать, как это происходит. – mack

+0

Тим, я рассматривал это для своих собственных проектов (мы в середине миграции). В зависимости от того, что вам нужно сделать здесь, вы также можете посмотреть, как использовать Send-MailMessage -UseSsl -SmtpServer smtp.office365.com -Credential. Я перемещаю EWS больше, чтобы автоматизировать все, что я должен был сделать в Outlook на сервере 2003 года. –