1

我不太确定从哪里开始。理想情况下,我希望有一个 Perl 脚本,它可以连接到我工作的 Exchange 服务器并查询所有会议室的日程安排。我相信我想要完成的就是这个。唯一的问题是,我在 Mac 上运行,而Exchange 库仅在 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');

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

<?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——除了将它加载到一个对象中——我相信它会失败,因为IdChangeKey值是从引用的 Microsoft 页面复制的......不太确定在哪里可以找到这些值除了以某种方式在 Exchange 服务器上,但我不是管理员......只是一个简单的用户。

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

此外,Outlook 报告它的版本是 14.3.7,我相信它是 Exchange 2010。

4

0 回答 0