Ad Widget

Collapse

SMS sent

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • freelsd
    Member
    • Jul 2009
    • 46

    #1

    SMS sent

    Привет, подскажите как настроить отправку сообщений по смс через интернет шлюзы. В стандартной поставке нет, а очень хотелось бы.
  • xara
    Junior Member
    • Oct 2009
    • 5

    #2
    можно отправлять например таким скриптом. Ложишь его в /home/zabbix/bin/sms.php, добавляешь в Администрирование - Типы средств передачи как сценарий (указывая sms.php, а не полный путь). Естественно в коде нужно указать свои пароль и ящик, и тогда будет счастье :

    Code:
    #!/usr/local/bin/php
    <?php
    
    $message = "";
    $to = $argv[1];
    
      $address = 'mysuperdomen.com'; // адрес smtp-сервера
      $port    = 25;          // порт (стандартный smtp - 25)
    
      $login   = '[email protected]';    // логин к ящику
      $pwd     = 'mysuperlongpassword';    // пароль к ящику
    
      $from    = '[email protected]';  // адрес отправителя
    
      $subject = date("d.m H:i")." ".$argv[2];       // тема сообщения
    
        try {
    
            // Создаем сокет
            $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
            if ($socket < 0) {
                throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\n");
            }
    
            // Соединяем сокет к серверу
        //    echo 'Connect to \''.$address.':'.$port.'\' ... ';
            $result = socket_connect($socket, $address, $port);
            if ($result === false) {
                throw new Exception('socket_connect() failed: '.socket_strerror(socket_last_error())."\n");
            } else {
      //          echo "OK\n";
            }
    
            // Читаем информацию о сервере
            read_smtp_answer($socket);
    
            // Приветствуем сервер
            write_smtp_response($socket, 'EHLO eqvia.com');
            read_smtp_answer($socket); // ответ сервера
            // Делаем запрос авторизации
            write_smtp_response($socket, 'AUTH LOGIN');
            read_smtp_answer($socket); // ответ сервера
    
            // Отравляем логин
            write_smtp_response($socket, base64_encode($login));
            read_smtp_answer($socket); // ответ сервера
    
            // Отравляем пароль
            write_smtp_response($socket, base64_encode($pwd));
            read_smtp_answer($socket); // ответ сервера
    
            // Задаем адрес отправителя
            write_smtp_response($socket, 'MAIL FROM:<'.$from.'>');
            read_smtp_answer($socket); // ответ сервера
    
            // Задаем адрес получателя
            write_smtp_response($socket, 'RCPT TO:<'.$to.'>');
            read_smtp_answer($socket); // ответ сервера
    
            // Готовим сервер к приему данных
            write_smtp_response($socket, 'DATA');
            read_smtp_answer($socket); // ответ сервера
            // Отправляем данные
            $message = "To: $to\r\n$message"; // добавляем заголовок сообщения "адрес получателя"
            $message = "Subject: $subject\r\n$message"; // заголовок "тема сообщения"
    //        $message = "Content-type: text/html\r\n".$message;
            write_smtp_response($socket, $message."\r\n.");
            read_smtp_answer($socket); // ответ сервера
    
            // Отсоединяемся от сервера
            write_smtp_response($socket, 'QUIT');
            read_smtp_answer($socket); // ответ сервера
    
        } catch (Exception $e) {
    //        echo "\nError: ".$e->getMessage();
        }
    
        if (isset($socket)) {
            socket_close($socket);
        }
    
        // Функция для чтения ответа сервера. Выбрасывает исключение в случае ошибки
        function read_smtp_answer($socket) {
            $read = socket_read($socket, 1024);
    
            if ($read{0} != '2' && $read{0} != '3') {
                if (!empty($read)) {
                    throw new Exception('SMTP failed: '.$read."\n");
                } else {
                    throw new Exception('Unknown error'."\n");
                }
            }
        }
    
        // Функция для отправки запроса серверу
        function write_smtp_response($socket, $msg) {
            $msg = $msg."\r\n";
            socket_write($socket, $msg, strlen($msg));
        }
    
    ?>
    P.S. Скрипт поверять командой /home/zabbix/bin/sms.php [email protected] subject
    Last edited by xara; 23-10-2009, 14:22.

    Comment

    • freelsd
      Member
      • Jul 2009
      • 46

      #3
      Спасибо большое, правда пока что не могу понять
      1) Где в заббиксе каталог bin.
      u01686@hsrv2#ls | grep bin
      u01686@hsrv2#
      2)
      Не увидел добавления сценариев =( Только добавление нового средства передачи

      Comment

      • xara
        Junior Member
        • Oct 2009
        • 5

        #4
        Originally posted by freelsd
        Спасибо большое, правда пока что не могу понять
        1) Где в заббиксе каталог bin.
        U01686@hsrv2#ls | grep bin
        u01686@hsrv2#
        я кажется создавал его вручную. Хотя старожилы наверняка знают лучшее решение.
        Originally posted by freelsd
        2)
        Не увидел добавления сценариев =( Только добавление нового средства передачи
        тип средства передачи - сценарий.

        Comment

        • freelsd
          Member
          • Jul 2009
          • 46

          #5
          Originally posted by xara
          я кажется создавал его вручную. Хотя старожилы наверняка знают лучшее решение.


          тип средства передачи - сценарий.
          =))) Ooops, извиняюсь.

          Comment

          • freelsd
            Member
            • Jul 2009
            • 46

            #6
            [26-Oct-2009 17:53:45] PHP Parse error: syntax error, unexpected '{' in .../html/zabbix/bin/sms.php on line 16
            Вот, к сожалению с какой проблемой столкнулся. Однако я бы предпочел использовать старндартную функцию mail у bash, не подскажите что за параметры передаются заббиксом при попытке отправить скриптом?
            То есть, с какими параметрами вызывает самопальный скрипт заббикс. У Вас указано, что php скрипт берет адрес отправителя как 1-й аргумент, но тем не менее, в заббиксе я прямо не указываю мой ящик при конфигурировании скрипта.

            Comment

            • xara
              Junior Member
              • Oct 2009
              • 5

              #7
              Originally posted by freelsd
              [26-Oct-2009 17:53:45] PHP Parse error: syntax error, unexpected '{' in .../html/zabbix/bin/sms.php on line 16
              Вот, к сожалению с какой проблемой столкнулся.
              Может у Вас стоит 4-ая ветка PHP?

              Originally posted by freelsd
              Однако я бы предпочел использовать старндартную функцию mail у bash, не подскажите что за параметры передаются заббиксом при попытке отправить скриптом?
              То есть, с какими параметрами вызывает самопальный скрипт заббикс. У Вас указано, что php скрипт берет адрес отправителя как 1-й аргумент, но тем не менее, в заббиксе я прямо не указываю мой ящик при конфигурировании скрипта.
              Скрипт прописывается сначала в Администрирование - Типы средств передачи,
              а после этого в Администрирование - пользователи - "выбор отдельного пользователя" - средство передачи - добавить. При этом уже указывается тип sms(или как вы его назвали), в поле "Отправлять" - емейл sms-гейта (что-то вроде [email protected]). Именно на него будет отправлять письма заббикс.

              В отличии от простой отправки письма на е-мейл, данный скрипт не отправляет текст письма (так как в заголовке и так вся инфа написана), а так-же в заголовок добавляет дату отправки (вида 29.10 13:49). Но самое важное - оно отправляет письмо не от локального ящика - а от имени удалённого, размещенного на другом сервере. Естественно для этого ему приходится проходить smtp авторизацию (как и любому почтовому клиенту).

              Стандартная unix-программа mail по моему в принципе ничего такого сделать не сможет. Параметры, получаемые скриптом в принципе очевидны - 1-ый e-mail (то что написано в поле "Отправлять", у пользователя, в свойствах данного "скрипта"), а второй - заголовок письма.

              P.S. Текст письма наверное идёт третьим аргументом. Ручаться не стану - не проверял
              Last edited by xara; 29-10-2009, 16:51.

              Comment

              • freelsd
                Member
                • Jul 2009
                • 46

                #8
                Спасибо большое за Ваш подробный ответ. PHP5, но я пошел по кратчайшему пути и сделал отправку сообщений на джаббер, затем на сервере установил mcab, перехватываю все сообщения поступающие на джаббер. Правда mailtosms у операторов в ДС не работают, поэтому отправляю через форму отправки смс на сайте используя антикапчу. Пока что работает плохо, но думаю скоро отлажу.
                Если нужны скрипты, могу поделиться в личку. Стоимость 1000 смс становится порядка 1$. А то платные смс гейты это как-то в 30 раз дороже.

                Comment

                • xara
                  Junior Member
                  • Oct 2009
                  • 5

                  #9
                  php parse error: Syntax error, unexpected '{' in .../html/zabbix/bin/sms.php on line 16
                  Скопипастил скрипт с форума обратно - у меня такой ошибки не возникло. Может проблема была в неправильном копипастинге?

                  Comment

                  • LPby
                    Junior Member
                    • Aug 2008
                    • 21

                    #10
                    Есть скрипт на php для отправки смс через сайт Velcom.
                    кому интересно пишите - поделюсь

                    Comment

                    Working...