Perl:使用SOAP连接到Microsoft Exchange

时间:2013-09-25 03:45:27

标签: xml perl soap exchangewebservices exchange-server-2010

我不太确定从哪里开始。理想情况下,我希望有一个Perl脚本连接到我的工作的Exchange服务器并查询所有会议室时间表。我相信我想要完成的是this。唯一的问题是,我在Mac上运行,Exchange libraries仅在Windows上可用,因此我尝试在Perl中尝试SOAP方式。唯一的问题是,我真的不知道我在做什么。

我看了EWS::Client,这很棒......它允许我连接到Exchange服务器并从我的日历中获取事件。唯一的问题是,这个模块没有我想要的东西,所以我有点回到原点。如果我可以利用EWS :: Client的连接然后以某种方式向Exchange服务器发送XML请求,我想我已经拥有它,但我真的不知道该怎么做。

我已经开始使用此连接代码:

#! /usr/bin/env perl

use strict;
use warnings;
use LWP::UserAgent;
use SOAP::Lite;
use XML::Simple;

my $file = 'email.xml';
my $xml = new XML::Simple;
my $data = $xml->XMLin('email.xml');

my $service = 'https://<domain>/EWS/Services.wsdl';
my $addr = 'https://<domain>/EWS/Exchange.asmx';
my $domain = '<domain>';
my $uname = '<username>';
my $pass = '<password>';
my @ua_args = (keep_alive => 1);
my @creds = ($domain, '', $uname, $pass);
my $schema_ua = LWP::UserAgent->new(@ua_args);
$schema_ua->credentials(@creds);
# I believe this proxy call is making my connection
my $soap = SOAP::Lite->proxy($addr, @ua_args, credentials => \@creds);
$soap->schema->useragent($schema_ua);
$soap->uri('http://schemas.microsoft.com/exchange/services/2006/types');

当我运行这个脚本时,我没有收到任何错误,所以我认为它正在工作,但就像我已经说过的那样,我不知道怎么检查,除了发送一些XML到Exchange服务器。这就是我正在尝试加载 email.xml 文件(取自here),如下所示:

<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
  <soap:Body>
    <GetItem
      xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"
      xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types">
      <ItemShape>
        <t:BaseShape>Default</t:BaseShape>
        <t:IncludeMimeContent>true</t:IncludeMimeContent>
      </ItemShape>
      <ItemIds>
        <t:ItemId Id="AAAlAF" ChangeKey="CQAAAB" />
      </ItemIds>
    </GetItem>
  </soap:Body>
</soap:Envelope>

即使我没有使用这个XML - 除了将其加载到对象中 - 我相信它会失败,因为 Id ChangeKey 值被复制了从引用的Microsoft页面...不确定我在哪里可以找到除Exchange服务器以外的其他值,但我不是管理员...只是一个简单的用户。

我的想法是我应该能够使用SOAP::Lite调用函数($client->call($method => @arguments);)发送我的XML请求,但我甚至不确定我是否走正确的道路。你可以说,我对这个问题非常分散。如果有人能提供任何指导,我将非常感激。

此外,Outlook报告称它是版本14.3.7,我认为是Exchange 2010。

0 个答案:

没有答案