С постепенным падением цен на услуги мобильной связи, «трубу» может позволить себе завести даже студент. Однако после месяца эйфории и наслаждения собственной крутизной неожиданно понимаешь, что простой стипендии и подработок явно не хватает для более или менее комфортного общения с друзьями. Некоторые особо шустрые умудряются передавать свои мысли товарищу за бесплатные несколько секунд, однако всем ясно, что это не выход.
Решение напрашивалось само собой. Посетив сайты наиболее популярных в моем городе компаний «Киевстар», UMC и Golden Telecom, я обнаружил весьма интересные разделы, посвященные отправке SMS-сообщений на мобилки через Глобальную Сеть. «Вот то, что мне надо» подумал я и немедленно уселся за Delphi.
Технология отправки сообщений через Интернет была довольно проста: заполнив поля на соответствующей страничке сайта, пользователь фактически отправлял обычное письмо e-mail, адрес которого определялся таким образом:
Мне предстояло написать программу, которая, в зависимости от выбранного оператора, отправляла бы e-mail сообщение по тому или иному адресу. Конечно, категория мобильности в этом случае распространяется лишь на моего друга, у которого при себе телефон я-то ведь должен буду сидеть дома за компьютером. Но чем не пожертвуешь, стремясь сэкономить!
«Как же можно сэкономить с помощью твоей программы?» спросите. Очень просто. Клиентам «Киевстар», например, отправка сообщения обходится в 0.33 грн. Нашей же программе (на ПК с Windows 9x и 28.8-Кбит/c модемом) для отправки сообщения потребуется около 15-25 секунд интернет-времени, что даже в сумме с повременкой за телефон составит не более 0.1 грн в бизнес-время. Это почти в 3 раза дешевле обычного SMS. Немного проигрывая в мобильности связи, мы здорово выигрываем в ее цене!
Итак, если я вас убедил, пора приступать. На пустой форме создадим объекты ComboBox для выбора оператора, кнопку Button1 для непосредственной отправки письма, NmSmtp для взаимодействия с почтовым сервером. Также нам понадобится Memo для ввода текста письма (текст не должен содержать форматирования) и целая куча Edit`ов (для ввода номера абонента, темы письма, обратного адреса и smtp-сервера, через который, собственно, будут уходить сообщения). Интерфейсная часть программы почти готова.
Теперь пришло время для написания кода.
Сначала пользователь должен будет выбрать оператора связи из списка ComboBox1.
В качестве примера составим наш список следующим образом: Киевстар Ace&Base, Киевстар Контракт, UMC, Golden Telecom. Естественно, вы можете добавить сюда и других операторов мобильной связи, пользующихся уважением в вашей местности :-). Пишем процедуру выбора:
Как видим, в зависимости от выбора пользователя программа записывает в поле для указания номера абонента (у меня это Nomer) префикс номера соответствующей сети. После этого лишь остается вручную дополнить номер.
Немаловажная деталь: у большинства операторов мобильной связи SMS-сообщение должно содержать не более 120-160 символов, причем сюда входят и текст послания, и тема, и обратный адрес. Поэтому наша программа должна сама предупреждать многословного пользователя об окончании лимита символов. А сделаем мы это с помощью еще одного объекта Edit1 (для вывода информации об оставшихся символах) и объекта Timer1 (для регулярного обновления этой информации):
Объясняю работу этого довольно простого алгоритма. Мы объявляем две переменные для суммы символов и для пересчета строк. Сумме присваивается значение 0. После этого сканируем построчно поле для ввода текста сообщения (Memo1) и к сумме добавляем длину текущей строки.
Теперь допустим, что средняя длина SMS-сообщения без темы и обратного адреса равна 120 символам. При достижении количества символов 95 окошко Edit1 окрасится в предупреждающий желтый цвет, а при достижении 105 в красный. Не забудем в свойствах объекта Memo1 указать максимальную длину текста 120 символов (Memo1.MaxLength:=120;). Сделать это лучше в окне Object Inspector. Максимальную длину темы сообщения тоже лучше указать пусть она будет в пределах 10-20 символов.
После всех операций в Edit1 записывается количество еще доступных для ввода символов.
Вот, в принципе, и вся основная часть программы. Теперь нам лишь осталось написать код для отправки сообщения. Вот как выглядит исходник процедуры нажатия на кнопку отправки:
Комментарий: replyemail, subj, smtp и Edit8 объекты TEdit, соответственно, для указания обратного адреса, темы сообщения, адреса почтового сервера и для формирования окончательного адреса, на который уйдет наше SMS.
После этого можно украсить программу наворотами для собственного удобства например, приспособить ее для массовой рассылки SMS друзьям или клиентам.
В общем, удачи вам, а также смелых и компилирующихся :-) идей!