Проблема с SendMail()

 

Торговые сигналы образуются по открытию баров и часто бывает что приходят несколько сигналов одновременно (по нескольким валютам). Если речь о 2-3 сигналах то вроде бы проходит без проблем, но если больше то в журнале появляется ошибка:

Mail login to <email_server> failed

Некоторые емайлы доходят, но далеко не все.

Я так понимаю что причина в том что происходит попытка сконнектиться с почтовым сервером параллельно со всех валют и если не удается то на этом все и заканчивается (кажется не отправленные емайлы приходят с открытием нового бара, т.е. с огромной задержкой в Period() - основательными проверками этого я пока не занимался).

- Хотел узнать можно ли проверять статус SendMail() ? - Например, если неудачно то можно повторить попытку.

- Как вообще решить эту проблему в рамках существующих ограничений? - чтобы наверняка не было пропущенных сигналов.

Спасибо!

 

Организуйте очередь. Помещать в очередь могут все.

Читать- только один скрипт (зацикленный эксперт), который для входа дает номер своего окна-
при попытке войти другим окном- сбой.
Если долго (2-3 секунды) не было обращений с проверкой есть ли задания в очереди- сообщение.
Скрипт (эксперт) будет посылать из одного потока.

На длль очередь- это просто. 

Тогда возможно стоит найти компонент для отправки почты из самой dll.
(для php точно есть, причем с SMTP аутентификацией, в т.ч. на gmail)

 

Насколько я понимаю нет возможности проверить статус SendMail() ?

(успешным ли было отправление емайла или нет)

.

jartmailru, Спасибо!

 
void SendMail( string subject, string some_text) 
Посылает электронное письмо по адресу, указанному в окне настроек на закладке "Почта".
Отсылка может быть запрещена в настройках, также может быть не указан адрес электронной почты. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().
 
Integer:
void SendMail( string subject, string some_text)
Посылает электронное письмо по адресу, указанному в окне настроек на закладке "Почта".
Отсылка может быть запрещена в настройках, также может быть не указан адрес электронной почты. Чтобы получить информацию об ошибке, необходимо вызвать функцию GetLastError().


Т.е. будет достаточно добавить проверку: (?)

                     if(AlertEmail==true) {
                        SendMail(...);

                        if(Fun_Error(GetLastError())==1) {
                           continue;
                        }
                     }
Причина обращения: