Отправка SMS, email из QLua, или C#

Автор записи: Дмитрий (Admin)
1 звезда2 звезды3 звезды4 звезды5 звезд (Голосов 2, среднее: 5,00 из 5)
Загрузка...

SMSОтправка SMS

Для того, чтобы программно отправлять SMS из QLua, или C#, для начала перейдите по этой ссылке. Вы попадете на сайт сервиса "SMS ЦЕНТР"
img-2015-07-03-21-36-09
Нажав на кнопку "РЕГИСТРАЦИЯ В СЕРВИСЕ", Вы увидите форму регистрации, заполните все поля, обязательно укажите свой телефон.
SMS форма регистрации
Нажмите на кнопку "Зарегистрироваться".
Затем нажмите на кнопку "Мой кабинет":
img-2015-07-03-21-50-35
Далее, нажмите на ссылку "Подтвердить номер", затем на кнопку "Получить SMS", Вам на телефон придет SMS с кодом, введите его в поле слева от кнопки, и нажмите ниже кнопку "Подтвердить номер"
img-2015-07-03-21-57-10
После этого на Вашем счету появятся 15 подарочных рублей для тестирования.
Цены на отправку SMS вы можете посмотреть в разделе "Мой кабинет".
На этом настройку на данном сайте можно считать завершенной.

Для использования данного сервиса в QLua нужно скачать данный архив, извлечь из него 3 папки: "lua", "mime", "socket". И поместить их в корневой каталог терминала QUIK (туда, где файл info.exe).

Пример отправки SMS из QLua

Для отправки SMS из C# перейдите по данной ссылке и скачайте первый файл "smsc_api.cs"
img-2015-07-06-19-34-37
Положите его в папку с Вашим проектом C# (там, где папка bin) и добавьте его в проект, нажав правой кнопкой мыши по названию проекта, перейдя по пути: "Добавить" -> "Существующий элемент...", выбрав данный файл в папке проекта и нажав кнопку добавить.
img-2015-07-06-19-39-50

Далее, нажмите правой кнопкой мыши по ссылке "References" Вашего проекта и выберите "Добавить ссылку...".
img-2015-07-06-19-46-35
В открывшемся окне найдите "System.Web", поставьте галочку слева от него и нажмите на кнопку "ОК".
img-2015-07-06-19-48-44
Теперь необходимый функционал подключен к проекту!

Пример отправки SMS из C#

ОТПРАВКА E-MAIL

Для того, чтобы отправить письмо на эл.почту (в т.ч. с прикрепленным файлом) из QLua скачайте архив EmailSender.zip, в нем находятся 2 файла: SenderEmail.dll - библиотека, которая подключается к скрипту QLua и Email.exe - приложение (почтовый клиент), написанное на C#, которое автоматически запускается и завершается и видно только в виде иконки (логотип сайта) в области уведомлений (правый нижний угол рабочего стола Windows). Оба этих файла нужно извлечь из архива и поместить в корневой каталог терминала QUIK (где info.exe).

Пример отправки EMAIL на ящик MAIL.RU из QLua

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

Код DLL
Код C#

Если по какой-то причине Вы не можете, или не хотите, использовать Visual Studio 2015, то можете скачать готовое решение для Visual Studio 2010. Данное решение использует библиотеку "BOOST" для C/C++, если Вы не знаете как использовать данную библиотеку, можете ознакомиться здесь.

Еще один пример отправки EMAIL на ящик MAIL.RU из C#

Некоторые почтовые сервисы предоставляют оповещение по SMS о новых письмах, по этому, этот способ можно использовать как альтернативное оповещение.

Если у Вас появились какие-то вопросы, задайте их в комментариях под статьей !!!

Добавить комментарий

Отправка SMS, email из QLua, или C#: 175 комментариев

  1. Дмитрий доброго дня.

    Я не волшебник но хочется выучиться на него.
    Помогите понять почему не работает отсылка СМС.

    1 http = require('socket.http');
    2 login = "cann"; -- Ваш логин на сайте smsc.ru
    3 password = "pa1959pa"; -- Ваш пароль на сайте smsc.ru
    4 phone = "79190655741"; -- Ваш номер телефона
    5 message = "робот";
    6 function main()
    7 message(tostring(http.request "http://smsc.ru/sys/send.php?login="..login.."&psw="..password.."&phones="..phone.."&mes="..message));
    8 end;

    При запуске данного кода в квик пишет такую ошибку
    lua:7:attempt to call global 'message'(a string value)

    Предварительно программы "lua", "mime", "socket" установлены деньги на сервере СМС есть.
    Просветите в чем проблема.

    1. Дмитрий доброго и удачного Вам дня.

      Исправил код но опять возникла непонятка.
      При запуске выдает ;
      ERROR = 1 (parameters error)cann&psw=pa1959pa&phones=79190655741&mes=робот

      мои данные в коде
      http = require('socket.http');
      login = "cann"; -- Ваш логин на сайте smsc.ru
      password = "pa1959pa"; -- Ваш пароль на сайте smsc.ru
      phone = "79190655741"; -- Ваш номер телефона
      msg = "робот";
      function main()
      message(tostring(http.request "http://smsc.ru/sys/send.php?login="..login.."&psw="..password.."&phones="..phone.."&mes="..msg));
      end;

      в чем проблема.

      1. Здравствуйте! Попробуйте в тексте сообщения (msg) использовать только английские буквы, например, robot, возможно проблема в неверной кодировке скрипта и русские символы неправильно передаются.

  2. Добрый день!

    А можно функцию SenderEmail.SendEmail как-то вызывать несколько раз в скрипте? Просто первый раз письмо отправляется, а при втором вызове- ОШИБКА: Почтовый клиент не запущен !!

    1. Добавила sleep (3100) после отправки каждого email, в этом случае работает. Я правильно понимаю, что из-за этой части кода невозможно отправлять письма ранее этого времени?
      if (GetTickCount() - TickCount >= 3000)
      {
      //Очищает память
      for (int i = 0; i < 4096; i++)pb[i] = '\0';
      //Сообщает о невозможности отправки
      lua_rawgeti(L, LUA_REGISTRYINDEX, callbackRef); // Достает функцию из реестра Lua по ранее полученному индексу и помещает в стек
      lua_pushstring(L, "ОШИБКА: Почтовый клиент не запущен !!!"); //Записывает в Lua-стек полученный результат
      lua_call(L, 1, 0); //Вызывает выбранную функцию в скрипте QLua, передавая в нее 1 параметр (L - стек, 1 - количество передаваемых параметров, 0 - количество возвращаемых значений))
       
      return (0);//Выходит из функции
      }
      }
       

        1. Здравствуйте! Эта часть кода

          1
          
          if (GetTickCount() - TickCount >= 3000)

          ждет время только если нет ответа от C# о том, что он готов отправить письмо, если ответ пришел, то

          1
          
          if (QluaWriteReady())

          будет истиной и цикл while будет завершен, код перейдет дальше к процессу отправки письма.
          Вам просто нужно после отправки письма дождаться результата в функции EmailResult, как только он придет, можете сразу отправлять новое письмо.

          1. -----Вам просто нужно после отправки письма дождаться результата в функции EmailResult, как только он придет, можете сразу отправлять новое письмо.

            А разве строчка

            while res~="OK" do sleep(1) end

            в функции

            function EmailResult(res)
            message(res);
            while res~="OK" do sleep(1) end
            end;

            этим не является?

            1. Нет, функция EmailResult вызывается по результату отправки, в нее в переменную res передается результат "ОК", или текст ошибки. Если письмо отправлено, то в функцию передастся "ОК" и Ваша строка не отработает ни одного цикла, а если передастся текст ошибки, то скрипт просто зависнет в этой функции, т.к. никогда не дождется следующего результата, потому что письмо отправляется не внутри этой функции, а в dll и С#

            2. Вот Вам простой пример:

              1
              2
              3
              4
              5
              6
              7
              8
              9
              10
              
              main = function()
                 Test(1)
                 -- До этой строки выполнение никогда не дойдет, потому что программа зависла в предыдущей
                 Test(2)
              end
               
              Test = function(num)
                 message(tostring(num))
                 while num ~= 2 do sleep(1) end
              end
              1. Спасибо, поняла, что вариант нерабочий. Но как тогда можно отследить?
                Попробовала так, писем отправляется уже больше:) но все равно на третьем опять та же ошибка

                function emaily(tema, tekst)
                resm=nil

                SenderEmail.SendEmail(
                "smtp.mail.ru",
                "mail@mail.ru",
                "1234",
                "mail@mail.ru",
                "mail@mail.ru",
                tema,
                tekst)

                while resm==nil do sleep(1) end

                end

                function EmailResult(res)

                message(res)
                resm=res

                end;

  3. Здравствуйте,

    если smtp сервер не мэйловский, Email.exe и библиотека ведь должны работать?
    Возникает ошибка

    Ошибка отправки email: System.Net.Mail.SmtpException: Failure sending mail. ---> System.Security.Authentication.AuthenticationException: The remote certificate is invalid according to the validation procedure.
    at System.Net.Mail.SmtpConnection.ConnectAndHandshakeAsyncResult.End(IAsyncResult result)
    at System.Net.Mail.SmtpTransport.EndGetConnection(IAsyncResult result)
    at System.Net.Mail.SmtpClient.ConnectCallback(IAsyncResult result)
    --- End of inner exception stack trace ---

              1. Да, в нем, я как-то давно тоже не мог на какой-то почтовый сервис письмо отправить таким способом, тоже на шифрование ругался, пару вечером покопался, так и не смог найти решение, возможно Вам больше повезет 🙂

                1. На mail используется ssl, на моем домене-нет, поэтому после замены строки в коде экзешника
                  Client.EnableSsl = true;
                  на
                  Client.EnableSsl = false;
                  все заработало.
                  Спасибо.