Как вы понимаете сам по себе Powershell не может отправлять SMS сообщения. Для этого нужен аппаратный GSM шлюз или сторонний сервис в интернете по отправке SMS. GSM шлюз не дешёвое удовольствие и служит для большого спектра задач нежели просто отправлять SMS. А так как нам нужно попросту отправить SMS сообщение, то будем использовать специальный сервис в интернете по отправки таких сообщений. Я для своего примера использовал сервис отправки SMS сообщений от SMS.RU. Данный сервис имеет богатый API и реализован на многих платформах.
Чтобы начать отправлять SMS сообщения вам нужно зарегистрироваться, подтвердить свой номер мобильного телефона. Далее вы получаете свой персональный ключ для работы с API. Ключ выглядит таким вот образом AD34BFE4-E63E-1B37-EE09-4D06D58053B3
. Далее необходимо пополнить баланс, минимум 20 рублей. Данный сервис позволяет вам отправлять до 5 SMS сообщений в сутки на свой номер совершенно бесплатно, при превышении деньги списываются согласно тарифа.
Так как мы с помощью Powershell не можем работать с API сервиса, то к нам приходит на помощь функция отправки электронной почты. Дело в том, что отправив письмо на адрес сервиса со своим API ключом, номером абонента и текстом, можно отправить SMS сообщение. Вот этот способ мы и будем использовать. Как отправить письмо с помощью Powershell можете прочитать тут (Powershell отправка почты с авторизацией через SMTP сервер Яндекса).
Письма необходимо отправлять на ваш уникальный адрес:
Можно указать несколько номеров. Перед каждым должен стоять знак плюс. Номера получателей должен быть написаны только цифрами, без пробелов и других знаков.
Номер получателя можно также не указывать в электронном адресе:
В этом случае его надо указать в заголовке (подробнее ниже).
Заголовок (subject) может содержать в себе параметры отправки, например:
(необязательно) N1,N2 - дополнительные номера телефонов, через запятую и без пробелов, на которые надо отправить сообщение (необязательно) from - одобренный отправитель (после двоеточия)
Тело письма должно содержать текст сообщения:
hello world
Методы:
Используется отправка по SMTP протоколу. Надежность заключается в том, что в случае если между вашим и нашим сервером наблюдается ошибка связи, протокол SMTP обеспечит гарантированную повторную отправку вашего сообщения. Если бы вы использовали стандартный метод sms/send, вам бы пришлось отслеживать эти ошибки и дополнительно разрабатывать дополнительный программный код для обработки очереди исходящих сообщений.
Для подготовки скрипта нам понадобится текстовый файл с номерами абонентов разделенных запятой для отправки уведомлений. Создадим файл mobile.txt и внесем в него нужные нам номера абонентов:
Далее пишем небольшой сценарий для отправки электронного письма на почту SMS сервиса.
<# Проект: Отправка SMS сообщений Версия: 1.0 Описание: Скрипт отправки SMS сообщений с помощью Powershell Автор: bezramo-tlt.ru Сайт: http://bezramok-tlt.ru/ #> # Функция отправки сообщения на почту function sendMail { param([string]$mobile) # API ключ для работы с сервисом SMS.RU $keyAPI = 'Ваш API ключ SMS.RU' # Ваш или сторонний сервер SMTP $serverSmtp = 'smtp.yandex.ru' $port = 587 # От кого отправляем $from = 'Ваш ящик@yandex.ru' # Кому отправляем $to = $keyAPI+$mobile # Данные для авторизации на SMTP $user = 'Ваш ящик' $pass = 'Пароль' # Готовим сообщение к отправке $mes = New-Object System.Net.Mail.MailMessage $mes.From = $from $mes.To.Add($to) $mes.Body = 'Test sending SMS from PowerShell' # Проходим авторизацию на сервере и отправляем письмо $smtp = New-Object Net.Mail.SmtpClient($serverSmtp, $port) $smtp.EnableSSL = $true $smtp.Credentials = New-Object System.Net.NetworkCredential($user, $pass); $smtp.Send($mes) } # Список телефонов для рассылки $mobile = (Get-Content -Path $env:USERPROFILE\Desktop\mobile.txt) -split ',' # Отправляем SMS в цикле for($i = 0; $i -lt $mobile.Length; $i++) { $sendSMS = $mobile[$i]+'@sms.ru' sendMail $sendSMS } # Удаляем переменные Remove-Variable -Name * -Force -ErrorAction SilentlyContinue
Теги:
Поддержи проект: