2011-12-06 19 views
0

VBScriptを使用してOutlook Anywhereに接続する必要があるクライアントから電子メールを送信するという不幸な作業があります。私はExchange Serverを扱うときに正しい用語を理解できないかもしれないので、私が何を探しているのかわからないために答えが出ないかもしれません。Outlook Anywhere経由でVBScriptを使用して電子メールを送信

スクリプトは多くの場所/ネットワークから接続されており、既定のポートを通過するトラフィックをブロックする場合としない場合があるため、SMTPは使用できません。ネットワーク管理者(実際の顧客は誰か)が変更しないため、デフォルトポートを変更できません。

正しい方向へのポインタがあれば幸いです。

答えて

0

私の質問への答えは、次の質問Ways to send E-Mails over MS Exchange with VBScriptですでにstackoverflowの上、部分的です。

以下のコード(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をクライアントマシンで使用して、作成した電子メールメッセージを送信して、おそらくExchange Server経由で、公衆ネットワーク上にあるときにプライベートLANまたはVPN経由で構成されます。もしそうなら、あなたが見たいものは、Microsoftの命名法で「オートメーション」と呼ばれるものを使用することです。ほとんどのスクリプト言語と開発ツールでは、COM経由でこれを行うことができます。次のマイクロソフトの記事では、VBAでこれを行う方法を示しています。これは、VBScriptのためにほぼそのまま使用するための詳細を示します。

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

+0

クライアントには、メッセージを送信する専用の電子メールアドレスを持つ会社サーバーはありません。自動化は単にクライアントのデフォルトアカウントから電子メールを送信するだけではありませんか? – Chris

+0

Outlookに自動送信すると、Outlookの設定されたプロファイル経由で電子メールが送信されます。あなたが送信されたように見えるようにメールを送信するようにプロファイルが設定されている場合は、それを取得する必要があります。したがって、プロファイルがExchange用に構成されている場合は、Exchangeサーバー経由でプロファイルが送信されます。他のSMTPサーバーを使用するように構成されている場合は、それを使用して送信されます。プロファイルに含まれるものは何でも、Outlookがそれを配信しようとする方法を制御します。あなたのために明確になる希望... – dmarietta

+0

はい、ありがとうございます。しかし、それは私がする必要があるものではありません。顧客は、エンティティのような疎結合のフランチャイズの1つであり、究極のクライアントマシンは誰かの個人メールアカウントに登録されます。送信するメールは「公式」アカウントを通過する必要があるので、単にOutlookに決定させると、それをカットしません。 – Chris

関連する問題