如何使用Mail :: Outlook与Outlook 2007

时间:2015-06-25 03:35:15

标签: perl 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.  

似乎变量$outlooknew Mail::Outlook()期间未初始化。如果启动新对象失败,模块Mail :: Outlook将返回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"';

1 个答案:

答案 0 :(得分:1)

在按照 指示的内容进行了一些搜索后,我看到了一篇关于错误的文章Win32::OLE(0.1709) error 0x80080005: "Server execution failed"

COM Process Elevation Mismatching

它表示outlook应用程序和perl脚本的访问级别必须相同:

  

为了使一个漫长(令人沮丧)的故事简短,问题是我从一个被提升的CMD.EXE窗口运行脚本(“以管理员身份运行”)。当我从非升级过程(正常用户)运行Outlook时,似乎存在进程高程不匹配。

在我的情况下这是一样的..当我的Outlook正常运行时,我以管理员身份运行我的cmd ..

MSDN对此有发言权:

  

COM安全性了解完整性级别,并且不允许低完整性客户端绑定到以更高完整性级别运行的类实例。

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

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