Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Oleg
2377
Oleg  

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

Mail login to <email_server> failed

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

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

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

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

Спасибо!

Андрей
1890
Андрей  

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

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

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

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

Oleg
2377
Oleg  

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

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

.

jartmailru, Спасибо!

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


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

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

                        if(Fun_Error(GetLastError())==1) {
                           continue;
                        }
                     }
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий