2011-12-06 119 views
0

我要通过,需要通过任何地方的VBScript连接到Outlook客户端发送电子邮件的不幸任务。与Exchange Server打交道时,我可能不知道正确的术语,因此答案可能是逃避我,只是因为我不知道我在寻找你,并在谷歌小时后我还没有找到答案。发送使用VBScript电子邮件通过Outlook Anywhere的

我不能使用SMTP,因为脚本会从很多地方/网络要连接,他们可能会或可能不会通过默认端口阻塞交通。我无法更改默认端口,因为网络管理员(谁是真正的客户)不会更改它。

在正确的方向的任何指针将不胜感激。

回答

0

的回答我的问题是部分上的以下问题Ways to send E-Mails over MS Exchange with VBScript计算器了。

下面的代码(VBA,但足够接近的VBScript)被简单地发送SOAP消息到Exchange Web服务。它是从各种网站上发现的各种零碎(包括上面的链接)构建而成的。

Option Explicit 

' --------------------------------------------------------- 
' CONFIGURATION - change as needed 
' --------------------------------------------------------- 
Const TARGETURL = "https://mail.XXXXX.com/ews/exchange.asmx" 
Const USERNAME = "XXXXX\dnreply" 
Const PASSWORD = "[email protected]#x$x%" 

Sub SendMessageEWS() 
    Dim SOAP 
    SOAP = CreateMessageSOAP() 

    ' Send the SOAP request, and return the response 
    Dim oXMLHTTP, oXml 

    Set oXMLHTTP = CreateObject("MSXML2.XMLHTTP") 
    Set oXml = CreateObject("MSXML2.DOMDocument") 

    ' Send the request 
    oXMLHTTP.Open "POST", TARGETURL, False, USERNAME, PASSWORD 
    oXMLHTTP.setRequestHeader "Content-Type", "text/xml" 
    oXMLHTTP.send SOAP 

    If oXMLHTTP.Status = "200" Then 
     ' Get response 
     If oXml.LoadXML(oXMLHTTP.ResponseText) Then 
      ' Success 
      Debug.Print oXml.XML 
     End If 
    Else 
     Debug.Print oXMLHTTP.ResponseText 
     MsgBox "Response status: " & oXMLHTTP.Status 
    End If 

End Sub 

Function CreateMessageSOAP() 
    ' Normally this is done by using the DOM, but this is easier for a demo... 
    Dim SOAPMsg 

    SOAPMsg = SOAPMsg & "<?xml version='1.0' encoding='utf-8'?>" 
    SOAPMsg = SOAPMsg & " <soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:t='http://schemas.microsoft.com/exchange/services/2006/types' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'>" 
    SOAPMsg = SOAPMsg & " <soap:Body>" 
    SOAPMsg = SOAPMsg & "  <CreateItem MessageDisposition='SendAndSaveCopy' xmlns='http://schemas.microsoft.com/exchange/services/2006/messages'>" 
    SOAPMsg = SOAPMsg & "   <SavedItemFolderId>" 
    SOAPMsg = SOAPMsg & "    <t:DistinguishedFolderId Id='sentitems' />" 
    SOAPMsg = SOAPMsg & "   </SavedItemFolderId>" 
    SOAPMsg = SOAPMsg & "   <Items>" 
    SOAPMsg = SOAPMsg & "    <t:Message>" 
    SOAPMsg = SOAPMsg & "     <t:Subject>Exchange Web Service E-Mail Test</t:Subject>" 
' For HTML message body 
    SOAPMsg = SOAPMsg & "     <t:Body BodyType='HTML'><![CDATA[<h1>Test html body</h1>]]></t:Body>" 
' For text message body 
' SOAPMsg = SOAPMsg & "     <t:Body BodyType='Text'><![CDATA[Test text body]]></t:Body>" 
    SOAPMsg = SOAPMsg & "     <t:ToRecipients>" 
    SOAPMsg = SOAPMsg & "      <t:Mailbox>" 
    SOAPMsg = SOAPMsg & "       <t:EmailAddress>[email protected]</t:EmailAddress>" 
    SOAPMsg = SOAPMsg & "      </t:Mailbox>" 
    SOAPMsg = SOAPMsg & "     </t:ToRecipients>" 
    SOAPMsg = SOAPMsg & "    </t:Message>" 
    SOAPMsg = SOAPMsg & "   </Items>" 
    SOAPMsg = SOAPMsg & "  </CreateItem>" 
    SOAPMsg = SOAPMsg & " </soap:Body>" 
    SOAPMsg = SOAPMsg & " </soap:Envelope>" 

    CreateMessageSOAP = SOAPMsg 
End Function 
1

如果我正确理解你的问题,你实际上希望能够使用Outlook的安装/运行的版本在客户机上生成和发送电子邮件,它会移交给任何配置它使用MTA,可能通过它在公用网络上配置到私有LAN或VPN上的Exchange Server。如果是这样,你想看的是在微软的命名中使用所谓的“自动化”。对于大多数脚本语言和开发工具,可以通过COM来完成。以下Microsoft文章展示了如何在VBA中完成此操作,该操作应该能够为您提供足够的细节,以便与VBScript几乎相同。

http://support.microsoft.com/kb/209948

+0

不完全是,客户端有一个公司服务器,他们有一个专门的电子邮件地址,他们希望发送消息。自动化不会简单地从客户的默认帐户发送电子邮件吗? – Chris

+0

Outlook自动化将导致通过Outlook的配置文件发送电子邮件。如果配置文件被配置为按照您希望发送电子邮件的方式发送电子邮件,那么这就是您应该得到的。所以如果您的配置文件配置为Exchange,它将通过Exchange服务器发送。如果它被配置为使用其他SMTP服务器,那么它将使用该服务器发送。无论在配置文件中,它都将控制Outlook如何尝试传送它。希望澄清你... – dmarietta

+0

是的,谢谢,但这不是我需要做的。客户是那些松散连接的特许经营实体之一,最终的客户端机器将被注册到某人的个人电子邮件账户。我发送的邮件必须通过“官方”帐户,因此仅仅让Outlook决定不会削减它。 – Chris

相关问题