2011-01-31 8 views
0

シンプルなsmtpメール送信プログラムの(カットダウン)バージョンを作成しました。
すべてがうまく動作します(このカットダウンバージョンとより複雑なバージョン)。ソケットを介してsmtp電子メールサーバーのリターンコードをキャプチャする際の問題

ただし、電子メールサーバーは、メールの送信時に多数のメッセージを返します。
ProgressEvent.SOCKET_DATA(handleNewData機能)は(特に私は
250 2.0.0 [OK]をキャプチャするすべての電子メールのリターンメッセージ
をキャプチャしていないようです:メッセージを確認するXYZ
メッセージが送信されたとして、キューに入れられました。事前に?

感謝を

誰もが、すべてのメッセージがhandleNewDataによって捕獲されていない理由を知っていると私はこれを修正する方法。

私のコードは、Adobe AIRで書かれている

2.5

次のように私のトレース出力は次のとおりです。

Connecting to the mail server, example.com:25 
    Response is: 220 example.com ESMTP Postfix 
    Response is: 250 example.com 
    Response is: 250 2.1.0 Ok 
250 2.1.5 Ok 
354 End data with <CR><LF>.<CR><LF> 
250 2.0.0 Ok: queued as 2C0264F5FF 
221 2.0.0 Bye 

私のコードは次のとおりです。

<?xml version="1.0" encoding="utf-8"?> 
<s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" 
        xmlns:s="library://ns.adobe.com/flex/spark" 
        xmlns:mx="library://ns.adobe.com/flex/mx" 
        creationComplete="Smtp()"> 
<fx:Declarations> 
    <!-- Place non-visual elements (e.g., services, value objects) here --> 
</fx:Declarations> 

<s:Button label="Send Email" x="200" y="200" click="mail()"> </s:Button> 

<fx:Script> 
    <![CDATA[ 

      import flash.net.Socket; 
      import flash.profiler.showRedrawRegions; 
      import flash.utils.ByteArray; 

      import mx.core.mx_internal; 
      import mx.utils.ObjectUtil; 

      private var socket:Socket; 
      private var serverURL:String; 
      private var serverPort:int = 25; 
      private var serverResponse:ByteArray = new ByteArray(); 
      public var sendData:Array = new Array(); 
      public var dataStr:String;     


      public function Smtp():void 
      { 
       this.serverURL = "example.com"; 
       this.serverPort = 25; 
       socket = new Socket(); 
      socket.addEventListener(ProgressEvent.SOCKET_DATA,handleNewData); 
       this.connectToServer(); 
      } 

      public function mail():void 
      { 
       dataStr ="HELO example.com" + "\r\n"; 
       sendString(dataStr);     

       dataStr = "MAIL FROM:<[email protected]>\r\n"; 
       sendString(dataStr); 

       dataStr = "RCPT TO:<[email protected]>\r\n"; 
       sendString(dataStr); 

       dataStr = "DATA\r\n"; 
       sendString(dataStr); 

       dataStr = "To: <[email protected]>\r\n"; 
       sendString(dataStr); 

       dataStr = "Date: Wed Jan 26 2011 07:49:31 PM\r\n" 
       sendString(dataStr); 

       dataStr = "Subject: Test\r\n"; 
       sendString(dataStr); 

       dataStr = "My Text\r\n"; 
       sendString(dataStr); 

       dataStr = ".\r\n"; 
       sendString(dataStr); 

       dataStr = "QUIT\r\n"; 
       sendString(dataStr);  
      } 

      private function connectToServer():void 
      { 
       trace("Connecting to the mail server, " + serverURL + ":" + serverPort); 
       socket.connect(serverURL, serverPort); 
      } 


      private function sendString(dataStr:String):void 
      { 
       var bytes:ByteArray = new ByteArray(); 
       bytes.writeMultiByte(dataStr, "UTF-8"); 
       socket.writeBytes(bytes); 
       socket.flush(); 
      } 

      private function handleNewData(event:ProgressEvent):void 
      { 
       var numBytes:int = socket.bytesAvailable; 
       serverResponse = new ByteArray(); 
       while(--numBytes >= 0) 
       { 
        var byte:int = socket.readUnsignedByte(); 
        serverResponse.writeByte(byte); 
       }  

       var response:String = serverResponse.toString(); 
       trace("\t Response is: " + response);      
      } 


    ]]> 
</fx:Script> 
</s:WindowedApplication> 

答えて

0

申し訳チャップス/ chapettes、

をソケットが実際に:-)すべてのサーバの応答を受信して​​います

キューに入れられたメッセージが返される部分の近くで、ソケットはいくつかのliすぐにnes。

ああ、まあ、コードが誰かに何らかの使用のものであったことを願っています。

関連する問題