如何在 Outlook 2007 中使用 Mail::Outlook 创建邮件

How to create mail using Mail::Outlook with 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('sample@gmail.com');
$message->Cc('another@gmail.com');

$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.  

变量$outlook似乎在new Mail::Outlook()期间没有初始化。模块 Mail::Outlook returns undef 如果启动一个新对象失败..现在,我想知道为什么会这样..我认为这是因为 outlook 的安全问题,但我不知道知道如何调整它。请各位perl高手,有相同经历或者遇到过的,会有所帮助..

我在 windows 7 中使用 Microsoft Outlook 2007,并且我安装了 ppm install Mail-Outlook。 我的主要问题是:如何在 Outlook 2007

中使用 Mail::Outlook 创建邮件

更新

我尝试使用 print Dumper(Win32::OLE->LastError()); 并打印了这个错误:

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

按照 Tim Tom 的指示,稍作搜索后,我看到了一篇关于错误的文章 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 作为管理员,而我的 outlook 是 运行 通常..

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.

将我的命令行更改为与 outlook 应用程序相同的高度级别后,perl 脚本完美运行!

注意: perl 在使用 print Dumper(Win32::OLE->LastError()); 时如果没有错误会崩溃..