Воздушная почта, SMTP и crossdomain.xml Путаница

#apache-flex #smtp #flexbuilder

#apache-flex #smtp #flexbuilder

Вопрос:

Я создал приложение Flex, которое использует airxmail от Coltware для отправки SMTP-сообщений. Он вызывает локально размещенный SMTP-сервер (hmailserver), который соответствующим образом ретранслирует электронное письмо. При запуске в среде Flash Builder все работает так, как задумано. Я также могу отправлять электронную почту как локально, так и удаленно с SMTP-сервера, используя telnet, поэтому я знаю, что это не проблема с сервером.

При размещении на самом почтовом сервере, вне графического интерфейса пользователя, приложению не удается отправить электронное письмо. Я создал crossdomain.xml файл, разрешающий этот доступ, но я не верю, что он настроен должным образом.

Гибкий код:

   sender = new SMTPSender();
  sender.setParameter(SMTPSender.HOST,"192.168.10.10");
  sender.setParameter(SMTPSender.PORT,25);  
  sender.setParameter(SMTPSender.AUTH,true);
  sender.setParameter(SMTPSender.USERNAME,"emailuser@domain.com");
  sender.setParameter(SMTPSender.PASSWORD,"password");


  var message:MimeMessage = new MimeMessage();
  message.contentType = ContentType.MULTIPART_ALTERNATIVE;
  var from:INetAddress = new INetAddress("emailuser@server.com","Fake Name");

  message.setFrom(from);
  var toRecpt:INetAddress = new INetAddress(email,username);
  message.addRcpt(RecipientType.TO,toRecpt);

  message.setSubject(subject);


  var partHtml:MimeTextPart = message.createTextPart();
  partHtml.setHtmlText(body);

  sender.send(message);           
  sender.close();
  

Когда я добавляю прослушиватели для различных SMTPEvents, ни одно из них не срабатывает. Я думаю, это связано с отсутствием разрешений или плохой конфигурацией в crossdomain.xml файл, который настроен как:

 <?xml version="1.0" ?> 
  <!DOCTYPE cross-domain-policy (View Source for full doctype...)> 
- <cross-domain-policy>
  <allow-access-from domain="192.168.10.10" to-ports="25" secure="true" /> 
  <allow-access-to domain="192.168.10.10" secure="false" /> 

  </cross-domain-policy>
  

Я нашел несколько подобных вопросов, но опубликовал несколько ответов. Я убежден, что это что-то очевидное. Есть идеи относительно того, как я могу действовать?

Спасибо!

Ответ №1:

Размещенный локально? если вы не используете ‘localhost’ или ‘127.0.0.1’, это не локально размещенный сервер. Мне кажется, вы пытаетесь подключиться к серверу в вашей сети, но не на компьютере, на котором запущено приложение Air.

Я почти уверен, что отправитель STMP использует сокеты для подключения к серверу, поэтому я думаю, что вам нужно загрузить файл политики сокетов вручную, но я не уверен на 100%. Возможно, вы захотите попытаться полностью открыть междоменный файл (используя вместо этого ‘*’). Появляются ли какие-либо ошибки или он просто не подключается?

Комментарии:

1. Под «локально размещенным» я подразумевал, что почтовый сервер и экземпляр Apache, обслуживающий приложение Flex, запущены в одном и том же окне. Не должно иметь значения, но… Я также попробую использовать файл политики сокетов. Я не получаю никаких ошибок. Когда я проверяю журналы сервера SMTP, клиент открыл соединение, но немедленно закрывает его, увидев сообщение SMTP от почтового сервера.

2. Если они работают в одном и том же окне, почему бы не использовать ‘localhost’ вместо IP-адреса? Кроме того, поскольку этот проект с открытым исходным кодом, я предлагаю загрузить код и отладить его.

3. Я немного вырезал из междоменного файла перед его публикацией. Он содержит записи с идентичной областью видимости для localhost, IP-адреса, полностью определенного доменного имени (www.test.com например), домен (test.com ) и виртуальный хост, который Apache использует для размещения HTML-файлов приложения Flex. Что касается отладки кода, я не являюсь разработчиком Flex. Я надеюсь, что малый и средний бизнес может вмешаться и помочь с тем, что кажется структурной проблемой.

4. Я не говорю о перекрестном домене для локального хостинга, я имею в виду это: sender.setParameter(SMTPSender.HOST,"192.168.10.10");