int SleepMinutes=3; // Отсылать не чаще, чем раз в 3 минуты static int LastTime=0; if(TimeCurrent()>LastTime+SleepMinutes*60){ LastTime=TimeCurrent(); SendMail(........... }
Все довольно просто, чтобы не вешать индикатор sleep - ом, после успешной отправки снять время сервера, а потом при отправке постоянно спрашивать если текущее время больше записанного на t то можно отправлять. А потом конечно перезаписать новое время сервера (отправки). Это первое что пришло в голову можно поток создать отдельный конечно.
Спасибо, теперь все ОК. Код integer'a решил проблему.
extern int MailSleepMinutes=3; int start(){ if("что-то"=="произошло"){ // ставим письмо в очередь MailSend("Тема","Текст Письма"); } // на каждом тике MailSend(); } void MailSend(string aSubject="",string aText=""){ static string tMailBuffer[][2]; if(aSubject!="" || aText!=""){ // постановка в очередь ArrayResize(tMailBuffer,ArraySize(tMailBuffer)/2+1); tMailBuffer[ArraySize(tMailBuffer)/2-1][0]=aSubject; tMailBuffer[ArraySize(tMailBuffer)/2-1][1]=aText; } static int tLastTime=0; if(ArraySize(tMailBuffer)>0){ // есть в очереди письма if(TimeCurrent()>tLastTime+MailSleepMinutes*60){ // подошло время tLastTime=TimeCurrent(); SendMail(tMailBuffer[0][0],tMailBuffer[0][1]); // убираем отправленное из очереди for(int ti=0;ti<ArraySize(tMailBuffer)/2-1;ti++){ tMailBuffer[ti][0]=tMailBuffer[ti+1][0]; tMailBuffer[ti][1]=tMailBuffer[ti+1][1]; } ArrayResize(tMailBuffer,ArraySize(tMailBuffer)/2-1); } } }
Еще один вариант c очередью, по идее Мike. Только не тестировал, могут быть ошибки. Аналогично можно сделать не по отдельному письму на каждое сообщение, а добавлять текст к одному письму, а потом отправлять длинное письмо.

Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Всем привет! В последнее время некоторые известные почтовые сервисы и мобильные операторы объединились, чтобы создать услугу информирования пользователей через SMS о новом письме, которое пришло в почтовый ящик.
Терминал MT4 может отсылать письма на специально заготовленный почтовый ящик по сигналу какого-либо индикатора. За отсыл почты отвечает функция sendmail().
Проблема в том, что на всех бесплатных SMTP почтовых сервисах стоит ограничение на количество входящих писем в течение определенного интервала времени (защита от спама).
Мой индикатор же может отправить кучу писем за короткий промежуток времени. И в результате почтовый сервер перестает их принимать, и вся система накрывается медным тазом, пока почтовый сервер не оклимается.
Подскажите, как можно ограничить срабатывание функции sendmail() ? То есть, чтобы после предыдущего срабатывания он сработал не ранее времени t ?
Код выглядит примерно так:
Если индикатор покавывает то-то, то:
{
вывести на экран то-то;
sendmail("сигнал", "сигнал");
}