Я написал (урезанную) версию простой программы отправки почты 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:<user1@gmail.com>\r\n";
sendString(dataStr);
dataStr = "RCPT TO:<user1@example.com>\r\n";
sendString(dataStr);
dataStr = "DATA\r\n";
sendString(dataStr);
dataStr = "To: <user1@example.com>\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>