В 2013 году я отправлял себе прогноз погоды в sms-сообщении на телефон, используя для этого скрипт на R, API одного из онлайн-сервисов погоды, утилиту sendEmail и включенную услугу "e-mail to SMS". В 2022 году оказалось, что способ отправки SMS на телефон до сих пор работает (далее пример для оператора МТС Урал).

SMS должно быть БЕСПЛАТНО. По крайней мере, в биллинге оператора мы видим 0 р.:

Перед отправкой сообщения с E-mail на SMS убедитесь, пожалуйста, что у вас открыта услуга "Прием SMS с E-mail". По умолчанию, у всех абонентов МТС закрыта возможность получения сообщений с электронной почты во избежание рассылок спама. Уточните, как открыть данную услугу у своего оператора связи.

Для работы функции необходимо предварительно установить утилиту sendEmail (см. инструкцию, качаете архив, а exe-файл копируете в рабочую директорию с R-скриптом). Также мы будем использовать гугл-почту, с предварительно созданным новым паролем для приложения (см. справку гугл-почты как создавать и использовать пароли приложений):

Для работы функции также необходимо знать email2sms шлюз оператора. У меня MTS Урал, поэтому шлюз такой: sms.ural.mts.ru (шлюзы различны для регионов и операторов).

В интернете удалось найти некоторые email2sms шлюзы операторов, работоспособность которых не проверялась:

  • Билайн sms.beemail.ru

  • Мотив sms.ycc.ru

  • MTC sms.mtslife.ru

  • Мегафон sms.megafonsib.ru

Функция на R для отправки sms-сообщения (gist):

gmail.send <- function(username, password, emailto, sub, msg)
{
  frommailuser <- paste(username,"@gmail.com", sep='')
  com1 <- paste("sendEmail -f", frommailuser, "-t", emailto, "-o message-charset=utf-8 -u")
  com2 <- "-m "
  com3 <- paste("-o message-format=text -s smtp.gmail.com -o tls=yes -xu", username, "-xp", password)
  system(paste(com1, sub, com2, msg, com3))
}

Аргументы функции:

username — имя пользователя от вашей почты на gmail.com

password — пароль приложения для почты на gmail.com (см. выше), это 16 символов вида: affdjtihminycjzl

emailto — e-mail получателя. например, username@mail.ru или используя email2sms шлюз оператора 79ХХХХХХХХХ@sms.ural.mts.ru, где 79ХХХХХХХХХ – ваш номер телефона, на который будем отправлять СМСку.

sub — тема сообщения

msg — текст сообщения (не более 320 символов)

Пример использования:

gmail.send(username, password = pass, emailto = telnumbers,
sub = "Сообщение из R:",
msg = "Привет, Хабр!"
)

Видим сообщение от утилиты sendEmail, что сообщение успешно отправилось: Apr 04 21:48:05 desktop-qjcekiu SENDEM~1.EXE[9992]: Email was sent successfully!. В папке "Отправленные" вашего почтового ящика будет отправленное сообщение, а на телефоне мы получаем с номера 0883 СМС вида:

Не используйте для спама. Заблокируют ????

Где применять? Отправлять себе уведомление о завершении работы скрипта или любые другие нотификации под ваши задачи.

Комментарии (12)


  1. makar_crypt
    04.04.2022 20:29
    +1

    а сейчас есть сервис который дает номер на прием смс на долгое время например на 1-3 года?


    1. propulsive Автор
      04.04.2022 20:29

      я не в курсе, не слежу за этим, может быть, кто-то из читателей подскажет


    1. WoGoMe
      05.04.2022 00:16

      Есть Freeje с российскими корнями, в том числе зарубежных номеров, аренда пока платишь

      Zadarma ещё, но прием смс вроде был с проблемами


    1. Kiborg777
      05.04.2022 05:45

      twillio.com (он же twilio.com)
      Но вряд-ли он предоставляет российские номера. По некоторым странам стоимисть номеров $1/месяц. В принципе, там есть SMS Forwarding, но если делать пересылку на российские номера, то это будет не очень дешево.

      zadarma.com
      Дешево и удобно. Есть ли российские номера для приема СМС - не знаю, но есть дешевые номера в других странах (2-3 доллара в месяц).


      1. Kiborg777
        05.04.2022 05:57
        +2

        Назавание темы все-же не совсем корректное. Лучше было бы назвать тему как-то так "Отправляем email с помощью R и переадресуем на SMS Gateway". Сложно, но более корректно

        К тому же Email-to-SMS gateways существуют далеко не для всех операторов, а именно эти gateways переправляют emails на телефоны.

        У меня на сервере крутится подобный скрип на Питоне, но я не стал заморачиваться с СМС, а просто отправил на свой Gmail. При желании, могу задать фильтр для перенаправления на мой телефон как СМС (forward to xxxxxxxxx@mysmsprovidergatway.com) , но меня устраивает email.

        Как уже заметили, лучше, наверное, перенаправлять на Телеграм (у email-a есть latency, который обычно больше, чем у СМС). Отправлять на СМС есть смысл, если по какой-то причине ожидаются ситуации "без мобильного интернета".



        1. BDI
          05.04.2022 08:34
          +1

          Отправлять на СМС есть смысл, если по какой-то причине ожидаются ситуации «без мобильного интернета».

          А так же в случае если это алерт о пропадании интернета в офисе. Но для этого уже лучше использовать модем, благо примеры работы с PDU есть, в том числе для работы с кириллицей(вне рунета правда мне примеров в своё время не попалось, пришлось писать самому, след в сети с кодом на vbs оставил). Правда тут уже потребуется симка…

          Конечно можно модем использовать и для отправки в телегу через интернет, но внутри офисов(особенно в серверных) с этим могут быть проблемы, и СМС пролезет с большей вероятностью. Впрочем, можно и комбинировать — проверять доступность интернета через модем, и при его отсутствии отправлять СМС.


        1. loginsin
          05.04.2022 14:27

          Назавание темы все-же не совсем корректное

          Скорее: ставим какой-то софт и через system() его вызываем. Тут R не нужен, тут и cmd.exe (windows) или простейший sh (*nix) справятся. И вообще использовать system() в любом ЯП - плохая (ОЧЕНЬ плохая) практика.

          Классика: скачаем всякое, напишем 5 строчек уровня hello world и статья с громким заголовком на хабр готова.


          1. propulsive Автор
            05.04.2022 19:24

            ставим какой-то софт и через system() его вызываем. Тут R не нужен, тут и cmd.exe (windows) или простейший sh (*nix) справятся.

            Да, можно просто в гугл-почту зайти и отправить письмо на адрес вида: 79ХХХХХХХХХ@sms.ural.mts.ru

            И вообще использовать system() в любом ЯП - плохая (ОЧЕНЬ плохая) практика.

            Ничего криминального в этом нет. Есть несколько консольных утилит, использовать которые можно в R, статья об этом. Например, я пользуюсь своей простой R-оберткой для вызова консольной программы MyStem от Яндекса, которая производит морфологический анализ текста на русском языке. Аналогов нет.


            1. loginsin
              05.04.2022 22:51

              Мы же же всё ещё про автоматизацию? Простые консольные скрипты могут справиться с вызовом одной внешней команды значительно лучше (в контексте данной задачи), чем любой другой ЯП. Эта статья не показывает преимущества R, какие-то его особенности или что-либо ещё. Вся суть сводится к тому, чтобы скачать непонятный бинарник и в <any language> его запустить с некоторыми параметрами. Уровень студента первого курса, а не хабра.

              По второму пункту. Когда аналогов нет - то и вопросов нет. Но лучше использовать некую обёртку-интерфейс, а не прямой вызов команды.

              PS: Вдруг пригодится: https://stackoverflow.com/questions/23412265/how-do-you-send-email-from-r


              1. propulsive Автор
                05.04.2022 23:35

                PS: Вдруг пригодится: https://stackoverflow.com/questions/23412265/how-do-you-send-email-from-r

                Для R есть много пакетов для этого:

                Если нужна минимальная зависимость, то лучше использовать пакет {emayili}


        1. propulsive Автор
          05.04.2022 19:19

          Лучше было бы назвать тему как-то так "Отправляем email с помощью R и переадресуем на SMS Gateway"

          Вы правы. Такой заголовок лучше отражает алгоритм действий: отправка е-mail из R через переадресацию на SMS-шлюз. Я лишь поделился описанием того, что я делал в 2013 году, что до сих пор работает в 2022.


  1. lea
    04.04.2022 22:20
    +1

    Платный вариант: smsdirect ( digital-direct-api-3.18.pdf ) + library(RCurl)

    Хотя сейчас проще через telegram слать оповещения, пакет-обертка уже есть: https://cran.r-project.org/web/packages/telegram/README.html