В 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)
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
makar_crypt
а сейчас есть сервис который дает номер на прием смс на долгое время например на 1-3 года?
propulsive Автор
я не в курсе, не слежу за этим, может быть, кто-то из читателей подскажет
WoGoMe
Есть Freeje с российскими корнями, в том числе зарубежных номеров, аренда пока платишь
Zadarma ещё, но прием смс вроде был с проблемами
Kiborg777
twillio.com (он же twilio.com)
Но вряд-ли он предоставляет российские номера. По некоторым странам стоимисть номеров $1/месяц. В принципе, там есть SMS Forwarding, но если делать пересылку на российские номера, то это будет не очень дешево.
zadarma.com
Дешево и удобно. Есть ли российские номера для приема СМС - не знаю, но есть дешевые номера в других странах (2-3 доллара в месяц).
Kiborg777
Назавание темы все-же не совсем корректное. Лучше было бы назвать тему как-то так "Отправляем email с помощью R и переадресуем на SMS Gateway". Сложно, но более корректно
К тому же Email-to-SMS gateways существуют далеко не для всех операторов, а именно эти gateways переправляют emails на телефоны.
У меня на сервере крутится подобный скрип на Питоне, но я не стал заморачиваться с СМС, а просто отправил на свой Gmail. При желании, могу задать фильтр для перенаправления на мой телефон как СМС (forward to xxxxxxxxx@mysmsprovidergatway.com) , но меня устраивает email.
Как уже заметили, лучше, наверное, перенаправлять на Телеграм (у email-a есть latency, который обычно больше, чем у СМС). Отправлять на СМС есть смысл, если по какой-то причине ожидаются ситуации "без мобильного интернета".
BDI
А так же в случае если это алерт о пропадании интернета в офисе. Но для этого уже лучше использовать модем, благо примеры работы с PDU есть, в том числе для работы с кириллицей(вне рунета правда мне примеров в своё время не попалось, пришлось писать самому, след в сети с кодом на vbs оставил). Правда тут уже потребуется симка…
Конечно можно модем использовать и для отправки в телегу через интернет, но внутри офисов(особенно в серверных) с этим могут быть проблемы, и СМС пролезет с большей вероятностью. Впрочем, можно и комбинировать — проверять доступность интернета через модем, и при его отсутствии отправлять СМС.
loginsin
Скорее: ставим какой-то софт и через system() его вызываем. Тут R не нужен, тут и cmd.exe (windows) или простейший sh (*nix) справятся. И вообще использовать system() в любом ЯП - плохая (ОЧЕНЬ плохая) практика.
Классика: скачаем всякое, напишем 5 строчек уровня hello world и статья с громким заголовком на хабр готова.
propulsive Автор
Да, можно просто в гугл-почту зайти и отправить письмо на адрес вида: 79ХХХХХХХХХ@sms.ural.mts.ru
Ничего криминального в этом нет. Есть несколько консольных утилит, использовать которые можно в R, статья об этом. Например, я пользуюсь своей простой R-оберткой для вызова консольной программы MyStem от Яндекса, которая производит морфологический анализ текста на русском языке. Аналогов нет.
loginsin
Мы же же всё ещё про автоматизацию? Простые консольные скрипты могут справиться с вызовом одной внешней команды значительно лучше (в контексте данной задачи), чем любой другой ЯП. Эта статья не показывает преимущества R, какие-то его особенности или что-либо ещё. Вся суть сводится к тому, чтобы скачать непонятный бинарник и в <any language> его запустить с некоторыми параметрами. Уровень студента первого курса, а не хабра.
По второму пункту. Когда аналогов нет - то и вопросов нет. Но лучше использовать некую обёртку-интерфейс, а не прямой вызов команды.
PS: Вдруг пригодится: https://stackoverflow.com/questions/23412265/how-do-you-send-email-from-r
propulsive Автор
Для R есть много пакетов для этого:
{mailR}
{gmailr}
{blastula}
{blatr}
{mail}
{sendmailR}
Если нужна минимальная зависимость, то лучше использовать пакет {emayili}
propulsive Автор
Вы правы. Такой заголовок лучше отражает алгоритм действий: отправка е-mail из R через переадресацию на SMS-шлюз. Я лишь поделился описанием того, что я делал в 2013 году, что до сих пор работает в 2022.