Роботы, плагины и скрипты к чату MyChat. Разработка альтернативных клиентов и различных утилит. Технические вопросы по программированию, замечания и предложения по развитию API
Аватара пользователя
SergeyUAL
Здравствуйте.

Можно сделать автоматическую отправку оповещений на почтовый ящик пользователя(если указан), независимо в сети пользователь или нет?

С уважением, Сергей.
Аватара пользователя
Алексей Пикуров
Здравствуйте, Сергей.

Да, можно конечно, скриптом на сервере. Речь идёт именно об оповещениях или о приватных сообщениях?
Аватара пользователя
SergeyUAL
Именно об оповещениях.
Аватара пользователя
Алексей Пикуров
Да, вам нужно событие OnBroadcastMessage, следует сделать его обработку в скрипте, проверить, если юзер офлайн, то отправить ему письмо по email.

Можете написать скрипт сами, можем мы, по вашему заказу.

Перевожу тему в раздел вопросов, этот функционал уже есть.
Аватара пользователя
SergeyUAL
Скрипт по отправке оповещений на EMAIL.
Вопрос. Как будет вести себя сервер, если придется отправить письмо десяткам пользователям, не будет ли это гуглом расцениваться как СПАМ?

Код: Выделить всё
// ---------------------------------------
// Script created by Сергей Иванов (UIN 2)
// 26.07.2018 16:13:20
// ---------------------------------------

const
  sHost     = 'smtp.gmail.com';
  sLogin    = 'my_mail@gmail.com';
  sPassword = 'password'; 
  iPort     = 587;
  bSSL      = true; //использовать защищённое SSL/TLS соединение или нет
 
function OnBroadcastMessage(iCID, iUIN: integer; var sUsersList: string; var dtActualTo: double; var bReadNotify: boolean; iMsgType: integer; sMsg: string): boolean;
var
  s, sEmailTo, sEmailFrom, sTextBody, sNameFrom, sNameTo: string;
  iUINTo: integer;
  dt: double;
begin
  result := true;
     
    // получаем список UIN-ов людей, которым адрессовалось оповещение
    s:= sUsersList

 
// и перебираем их всех по одному, если офлайн передаем оповещение на почту
          while length(s)>0 do begin
            iUINTo := strtoint(GetNextSt(s, ','));
           
            if not mIsUINOnline(iUINTo) then begin
              sEmailTo   := mGetUserPrimaryEmail(iUINTo);
              sEmailFrom := mGetUserPrimaryEmail(iUIN);

                if (length(sEmailTo) > 0) and (length(sEmailFrom) > 0) then begin
                  sNameFrom := mGetUserFullNameByPreset(iUIN, 5);
                  sNameTo   := mGetUserFullNameByPreset(iUINTo, 5);

                  sTextBody := 'Здравствуйте, ' + sNameTo + ', пока вас не было в чате вам пришло оповещение:<br /><br />' +
                               '<span style="color:green">' +
                               FormatDateTime('[dd.mm.yyyy hh:nn:ss]', Now) +
                               '</span>' +
                               ' '+
                               '<span style="color:blue"><b>' +
                               sNameFrom +
                               '</b></span>'+
                               ' &gt; '+
                               ReplaceString(mConvertMsgToPlainText(sMsg, iMsgType), CRLF, '<br />', true, false);

                  SendEmail(sHost, iPort, sLogin, sPassword, sEmailFrom, bSSL, sEmailTo,
                            'Оповещение для ' + sNameTo + ' от MyChat', sTextBody, 1, '');
               
                end;
            end;
          end;
end;

begin

end.
Аватара пользователя
Алексей Пикуров
Вопрос не ко мне, а к Гуглу, напишите им на саппорт и спросите. Если есть сомнения, используйте свой домен, а не бесплатную публичную почту, там вас никто не посчитает за спамера.
Аватара пользователя
Алексей Пикуров
P.S. Если рассылки эпизодические, возможно, всё будет ок. Но использовать gmail для такой задачи — решение опрометчивое, вы никому ничего не докажете и не будете в курсе, если вас накажут.

Переношу тему в раздел скриптов.