2015-06-25 102 views
1

我正在嘗試使用Mail::Outlook創建郵件。我跟着這個答案,我相信這是正確的:如何在Outlook 2007中使用Mail :: Outlook創建郵件

Sending email using Perl
Mail::Outlook CPAN

我創建從教程基於一個簡單的代碼:

use strict; 
use warnings; 

use Mail::Outlook; 
use Data::Dumper; 

my $outlook = new Mail::Outlook(); 
print Dumper($outlook); 
print Dumper(Win32::OLE->LastError()); #added in response to comment 

my $message = $outlook->create(); 

$message->To('[email protected]'); 
$message->Cc('[email protected]'); 

$message->Subject('Testing sending mail from perl'); 
$message->Body('Hi, This is the body! wahahah!'); 

$message->save(); 

1; 

我所使用的電子郵件是真實的,但我在這裏代替它隱私的緣故.. 當我運行腳本時,出現一個錯誤:

$VAR1 = undef; 
Can't call method "create" on an undefined value at send_mail.pl line 14. 

new Mail::Outlook()期間,似乎變量$outlook未初始化。如果啓動一個新對象失敗,模塊Mail :: Outlook將返回undef。現在,我想知道爲什麼發生這種情況..我想這是因爲Outlook的安全問題,但我不知道如何調整它。請perl掌握在那裏,如果任何人有相同的經歷或遇到此,這將是有益的。

我在Windows 7中使用Microsoft Outlook 2007,我安裝了ppm install Mail-Outlook。 我的主要問題是:我怎樣才能在Outlook 2007

UPDATE

我嘗試使用print Dumper(Win32::OLE->LastError());創建使用Mail :: Outlook中的郵件並打印此錯誤:

$VAR1 = 'Win32::OLE(0.1709) error 0x80080005: "Server execution failed"'; 
+0

從上新的文件:創建一個新的Outlook郵件對象。成功返回對象或失敗時返回undef。要查看最後一個錯誤,請使用'Win32 :: OLE-> LastError();'。因此,打印該命令的輸出並查看彈出的錯誤消息 –

+0

是的,我也試過'Wind32 :: OLE-> LastError();'但它似乎沒有打印任何東西。 – catzilla

+1

該函數返回值,它不會自己打印任何東西。運行'print Dumper(Win32 :: OLE-> LastError())'(除非你已經這麼做了,在這種情況下,我們沒有什麼可以做的,因爲你沒有錯誤信息可以指導我們) –

回答

1

以下是什麼添湯姆已經指示,用一點搜索,我看到一篇關於錯誤的文章Win32::OLE(0.1709) error 0x80080005: "Server execution failed"

COM Process Elevation Mismatching

上面說的是Outlook應用程序和Perl腳本的訪問級別必須是相同的:

To make a long (and frustrating) story short, the problem was that I was running the script from a CMD.EXE window which was elevated (「Run as Administrator」). When I would run Outlook from a non elevated process (as a normal user would) there appeared to be a process elevation mismatch.

這是我的情況一樣..我跑我的CMD以管理員身份而我的展望被正常運行..

MSDN有此一說:

COM security is aware of integrity levels and does not allow lower-integrity clients to bind to class instances running at a higher integrity level.

後CH使用與outlook應用程序相同的高度來命令我的命令行,perl腳本完美運行!

注: perl的崩潰,而使用print Dumper(Win32::OLE->LastError());如果沒有錯誤..

相關問題