我正在尝试使用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将返回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"';
答案 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());
时崩溃,如果它没有错误..