В настоящее время я создаю приложение во Flex, которое использует SMTP Mailer для автоматической отправки электронных писем пользователю при выполнении определенного условия. Приложение проверяет это состояние каждые 30 секунд. Условие выполнено на основе новых записей, возвращаемых из таблицы базы данных.
Проблема заключается в следующем:
Когда условие выполняется в первый раз, электронное письмо доставляется пользователю без проблем.
Во второй раз условие выполнено, электронное письмо не доставлено. В логах smtp попытка доставки зависает в следующей строке:
354 Start mail input; end with <CRLF>.<CRLF>
В логах smtp нет кодов ошибок, но я отслеживаю следующее событие из класса SMTP Mailer:
[Event type="mailError" bubbles=false cancelable=false eventPhase=2]
Когда условие выполняется в третий раз, теперь доставляется электронное письмо, которое не было доставлено, когда условие было выполнено в предыдущий раз, а также электронное письмо для этого экземпляра.
Этот шаблон затем повторяется, при этом следующее электронное письмо не отправляется, после чего одновременно отправляются два электронных письма, когда условие выполняется снова.
В качестве сервера smtp используется Windows 2003 во внутренней сети. Письмо отправляется на учетную запись Outlook, размещенную на сервере Exchange, который также находится в этой внутренней сети.
Вот код actioncript, который создает объект SMTPMailer:
public var testMail:SMTPMailer = null;
public function alertNotify()
{
Security.loadPolicyFile("crossdomain.xml");
this.testMail = new SMTPMailer("myserver.ec.local",25);
this.testMail.addEventListener(SMTPEvent.MAIL_SENT, onEmailEvent);
this.testMail.addEventListener(SMTPEvent.MAIL_ERROR, onEmailError);
this.testMail.addEventListener(SMTPEvent.DISCONNECTED, onEmailConn);
this.testMail.addEventListener(SecurityErrorEvent.SECURITY_ERROR, onEmailError);
}
Вот код, который создает тело письма и вызывает метод отправки письма:
public function alertUser(emailAC:ArrayCollection):void
{
var testStr:String = "<html><head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"></head><body><TABLE border=\"1\"><TR><TH><b> Key </b></TH><TH><b> Location </b></TH><TH><b> Event Type </b></TH><TH><b> Comment </b></TH><TH><b> Update Time </b></TH></TR>";
for each (var event:rEntity in emailAC) {
testStr = testStr + "<TR><TD>" + event.key.toString() + "</TD><TD>" + event.xml.address.toString() + " " + event.xml.@municipality.toString() + "</TD><TD>" + event.xml.@type.toString() + "</TD><TD>" + event.xml.@comment.toString() + "</TD><TD>" + event.xml.attribute("update-time").toXMLString() + "</TD></TR>";
}
testStr = testStr + "</TABLE></body></html>";
testMail.flush();
testMail.sendHTMLMail("r@ec.ca","w@ec.ca","Event Notification",testStr);
}
На самом деле не уверен, где хранится электронное письмо, пока оно не будет окончательно отправлено ...
Будем весьма благодарны за любые предложения относительно того, как начать исправление этой проблемы.