2008-12-04 158 views
0

我正在開發一個涉及創建電子郵件聯繫人並將郵件轉發給該聯繫人的腳本。腳本的最後部分是自動發送測試郵件到地址以確保轉發工作。PowerShell Outlook發送電子郵件

所以我用下面的代碼:

[void] [Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Core") 
[void] [Reflection.Assembly]::LoadWithPartialName("Microsoft.Office.Interop.Outlook") 

$olApp = New-Object Microsoft.Office.Interop.Outlook.ApplicationClass 
$msg = $olApp.CreateItem(0) 
$msg.Recipients.Add("[email protected]") 
$msg.Subject = "test" 
$msg.Body = "test" 
$msg.Send() 

我在6號線得到一個錯誤:"You cannot call a method on a null-valued expression."

我在家裏運行的代碼,它工作得很好。差異:在工作的域中,在工作時使用Exchange Server,在工作時使用域帳戶。

我在兩臺機器上都使用相同版本的Powershell和Outlook。最好使用Outlook發送郵件,因爲我已經打開了Outlook,這樣郵件就會顯示在「已發送郵件」文件夾中。

回答

0

如果您改變了關於使用Outlook的想法,請查看CodePlex上的PowerShell社區擴展(免費)。他們提供了一個cmdlet來發送SMTP電子郵件,這足以測試新創建的地址。不確定在已發送郵件中進行測試是否有價值?特別是如果你是批量生產這些產品 - 直接使用SMTP比使用Outlook要快得多。

+0

我寫的東西被隱式授權在網絡上。其他人寫的東西需要經過一個大的批准過程。這不是爲了整體的需要,而是把過去5分鐘的工作變成30秒的任務。另外,我不知道SMTP服務器。 – Orihara 2008-12-05 01:01:13

1

我有類似的問題,一些COM對象似乎並沒有完全填充(似乎與公司的Outlook設置有關 - 也許是反病毒措施?)。但是,如果您註釋掉$msg.Recipients.Add("[email protected]")行並添加了$msg.Display(),則可以添加收件人並從那裏發送。不是一個很好的解決方案。

對於我的問題,我指出走向的Exchange Web服務(EWS),所以我下載了EWS API 2.2和使用下列內容:

Add-Type -LiteralPath "C:\Program Files\Microsoft\Exchange\Web Services\2.2\Microsoft.Exchange.WebServices.dll" 
$service = New-Object Microsoft.Exchange.WebServices.Data.ExchangeService -ArgumentList Exchange2010_SP1 
$service.AutodiscoverUrl(‘[email protected]’, {$true}) 

$msg = New-Object Microsoft.Exchange.WebServices.Data.EmailMessage($service) 
$msg.Subject = "Sent from Powershell EWS" 
$msg.Body = "<html><body><h1>TESTING</h1><p>This is a test message sent from Powershell!</p></body></html>" 
$msg.ToRecipients.Add("[email protected]") 
$msg.SendAndSaveCopy() 

這似乎工作得很好,並保存郵件到我的發送文件夾中。

如果你不需要的項目進行(例如添加自己作爲收件人)它可能是更容易,只需使用發送-MAILMESSAGE使用「NT AUTHORITY \匿名登錄」保存已發送項文件夾:

$emptySecStr = New-Object System.Security.SecureString 
$creds = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList "NT AUTHORITY\ANONYMOUS LOGON", $emptySecStr 
Send-MailMessage -SmtpServer $smtpServerName -Credential $creds -From $sendingAddr -to $sendToArray -Cc $sendCCArray -BodyAsHtml -body $htmlBody -Subject $subject 

我從一個很棒的討論here得到了這個技巧。

相關問題