Программа для переадресации SMS-сообщений

На днях контора, в которой я работаю, решила осчастливить меня служебной SIM-картой, дабы я мог сэкономить свои кровные, исключив из расходов статью «Сотовая связь». Дело, конечно, хорошее, однако возникла небольшая проблемка: что делать с личной SIM-картой, номер которой не менялся у меня уже лет 10 и все мои друзья и знакомые знают только этот номер. Варианта было два: купить телефон с двумя SIM-картами или включить на старом номере переадресацию

Я выбрал второй вариант, ибо на телефон с двумя SIM-картами банально нет лишних денег. Посему переадресация – единственный приемлемый выход. Однако тут возникла другая проблема: переадресация работает только для голосовых вызовов. А вот SMS-сообщения не переадресовываются. Это печально, ибо мне приходит достаточно много сообщений. Я решил, что это не правильно, вставил старую SIM-карту в 3G модем и написал программу для переадресации SMS на мой новый номер.

SMS Forwarder. Как это работает?

Работает это банально просто – свою старую SIM-карту я вставил в 3G-модем и воткнул на работе в первый попавшийся круглосуточно работающий сервер. Программа переадресации с определенной периодичностью проверяет модем на предмет новых SMS, и если таковые появились – переотправляет их на указанный в настройках номер.

Программа нормально работает с длинными SMS, корректно распознает текстовый номер отправителя (типа «Internet SMS» вместо номера) и т.п. В общем, я доволен.

Конечно, на переадресацию тратятся деньги SIM-карты, но это копейки. Зато получаем быстрое реагирование 🙂

Запуск

Первоначальная настройка программы достаточно проста:

SMSForwarder1

1. Указываем номер, на который будут пересылаться сообщения. Номер должен быть полным, например +79101112233.

2. Выбираем и настраиваем модем

3. Устанавливаем периодичность проверки поступления новых SMS

4. Жмем “Старт”

После этого программа с определенной пользователем периодичностью будет проверять, получены ли новые сообщения и если получены – переотправлять их на указанный номер.

Это основной функционал программы.

Дополнительные плюшки

В качестве дополнительных возможностей, как видно на рисунке выше, есть следующее:

  • Внеочередная проверка новых сообщений кнопкой “Проверить сейчас”
  • Запуск программы при загрузке Windows
  • Автозапуск таймера мониторинга при запуске программы
  • Сворачивание в системный трей при запуске.
  • Просмотр всех сообщений (как уже обработанных, так и новых)
  • Удаление всех сохраненных сообщений

Еще одна дополнительная функция – отправка произвольного текста на произвольный номер. Лично мне эта функция необходима, так как есть некоторые люди, которые знают мой старый номер и которым мой новый номер знать не надо. Они иногда шлют мне SMS, на которые мне иногда надо ответить. Гораздо проще ответить им со старого номера прямо из программы, чем вытаскивать SIM-карту из модема и вставлять ее в телефон.

Строка состояния внизу программы показывает количество принятых, отправленных SMS, а так же количество не собранных полностью длинных SMS (бывает что части SMS теряются …). Кроме того, там же отображается заполненность памяти SIM-карты и модема, а так же время, оставшееся до следующей проверки.

Системные требования

Платформа .NET версии 3.5 или выше.

Game Over

В общем, может кому-то эта программка пригодится. Жалобы и предложения принимаются в комментариях. При желании, можно доработать.

UPDATE-07.07.2012

Обновление от 07.07.2012 — По многочисленным просьбам добавлена возможность пересылать полученные сообщения на почтовый адрес. Проверено на mail.ru, работает. На других почтовых серверах — пишите, если не работает, проверим. Исходники так же обновлены. Качайте, если надо.

Скачать

Скачать

Исходные коды

Смотрите раздел «Исходные коды»

Поделиться с друзьями:
  • Добавить ВКонтакте заметку об этой странице
  • Одноклассники
  • Facebook
  • В закладки Google
  • Мой Мир
  • Twitter
  • LiveJournal
  • Яндекс.Закладки
  • LinkedIn
  • Reddit
  • StumbleUpon
  • БобрДобр
  • Memori.ru
  • МоёМесто.ru

Комментарии

      1. Здравствуйте. Механизм оплаты текста «через МТС» — такой же, как у платных файлообменников?
        И второе: не поделитесь ли качественным учебником по Borland C++? Ибо этим транслятором я не пользовался уже 12 лет, и надо обновить в памяти синтаксис

        1. Добрый день. Я не пользовался платными файлообменникакми, так что их механизмы оплаты мне неизвестны, увы.
          Учебником по Borland C++ не поделюсь, ибо никогда не писал на Borland C++. Мои программы (большинство из них) написаны на Microsoft C#

          1. Здравствуйте.
            О платных файлообменниках: здесь — деньги берёт не владелец сайта-обменника, а — именно МТС: около 20 руб в сутки — за «доступ к адресу» (т.е. «за отсутствие блокировки» этого адреса). И видимо, назло этому рэкету — Яндекс сделал свой Яндекс.Диск.
            Мой заказ текста SMSForwarder — оплачен сегодня через ЯндексДеньги (№90401651).
            И т.к. я первый раз плачу через Яндекс, то — такой вопрос: каким образом я получу файл с текстами (т.к. полагаю, что мой E-mail — Вам не известен)?
            Насчёт Microsoft C#, которым я пользовался весьма давно — работая на радиозаводе: в те времена — Microsoft не прикладывала к этому транслятору библиотеку «объектов».
            И поэтому — попрошу в двух словах: для рисования оконных и т.п. элементов — Ваша программа использует системную библиотеку, или внешнюю — от стороннего разработчика? Это — к тому, чтобы я смог понять назначение видимых объектов программы по их именам (т.к. знаю только имена видимых элементов из библиотеки Дельфи)

          2. Программа не использует сторонних библиотек. Все что используется — классические .net классы. Для того, кто писал на дельфи, разобраться с C# не трудно, я сам на дельфи писал в детстве…

          3. Мне кажется, для Borland было бы естественным ретранслировать вызов процедур из «как бы собственной библиотеки Borland» в вызов системных процедур Windows (т.е.. «создать видимость» собственной библиотеки В/В, в пакете Delphi). И т. обр., вопрос — только в «ретрансляции имён» этих процедур и функций. Однако где найти указаную «связь имён» — это вопрос.

          4. Мне кажется, для Borland лучше было бы придумать нечто более интересное, чем C++ Builder…

          5. Здравствуйте. Хотелось бы попросить ещё раз проверить (транслятором) раздаваемый Вами проект «SMSForwarder».
            Ибо, напр., из фрагмента (в файле ModemClass.cs)
            «public class ModemClass
            { public struct modemLog
            {public string command; public string modemReply; public bool error;}

            public ConfigClass Config;
            private SerialPort Port; 0)
            { try
            {Port=new SerialPort(portName);== каков здесь смысл правой части?==
            Port.BaudRate = Config.PortBaudRate;
            Port.DataBits = Config.PortDataBits;
            Port.Parity = Config.PortParity;
            Port.StopBits = Config.PortStopBits;
            Port.NewLine = System.Environment.NewLine;
            Port.Open();

            mLog.modemReply = «Connected OK on port » + portName;
            mLog.error = false;
            return Port.IsOpen;} ……….»
            (а конкретно — из строки «Port = New…») — как бы следует, что SerialPort — это указатель на объект с полем типа ConfigClass, и методами Open(), IsOpen() и др.. Однако тогда — функция New(P:pointer) (обычно — просто присваивающая указатель на область) — здесь выглядит странно. Ибо я полагаю, что при создании экземпляра объекта — должно быть что-то вроде Create().
            И для возможных, далее, аналогичных задач поиска определений типов в др. файлах проекта при отсутствии директив #include — хотелось бы ссылку на что-то, объясняющее — как для этих целей использовать извращение языка, именуемое «пространствами имён».

          6. Я прошу Вас объяснить механизм поиска, внутри Вашего проекта, файлов с объявлениями типов потому, что на эту тему — в Сети очень много словесного хлама. В т.ч. и на https://docs.microsoft.com/ru-ru/dotnet/csharp/programming-guide/namespaces/using-namespaces: где какие-то чайники — «кратко объясняют» то, что и сами — пока не поняли.
            Причина этого явления — Вам известна: напр., Borland — отнюдь не даёт понятие «объекта» на профессиональном уровне: т.е. — что «объект» является почти аналогом т. наз. «стекового кадра» с локальными переменными, создаваемого транслятором при обработке вызова процедур.
            Напротив — похоже, что в целях хорошей продаваемости — описание языка всегда делается именно для чайников (мол — «щёлкни мышкой — и машина сама слепит программу»). И поэтому я полагаю, что каждый профи — со временем создаёт собственное описание используемого языка: чтобы работать на действительно серьёзном уровне.
            С директивами #include — всё было понятно. А вот про «пространства имён» — ничего не знаю. И поэтому в данном случае — просто поискал объявление типа объекта «SerialPort» во всех *.CS из Вашего проекта. Но — не нашёл.

          7. Кстати: Вы не задавались темой программного выяснения максимально возможных скоростей обмена через контроллер «COM USB» каждой конкретной машины, и такой же характеристики самого USB-модема? Цель — Вам понятна.

          8. Выяснил, что в С# — «пространство имён» — это фрагмент дерева иерархии объектов. Т.е. вопрос — снят.

  1. Класс! А сделайте, пожалуйста, маленькую доработочку — опцию -отправлять на email? Будет вообще супер.

      1. Здравствуйте. Не посмотрите ли свежим глазом на
        http://hardisoft.ru/soft/samodelkin-soft/poluchenie-i-dekodirovanie-sms-soobshhenij-v-formate-pdu/comment-page-1/#comment-7923 , где описана такая проблема: модем Huawei E171 — отвечает («ГиперТерминалу») на команды, но не хочет отдавать существующие (т.е. видимые в памяти) SMS. Вопрос — в том, нет ли у этого модема каких-нибудь «специальных заморочек», вроде «защиты» SMS от всех, кроме программы «Коннект менеджер».

        1. Оказалось, что у Huawei E171 — для чтения доступна только секция памяти «SM» (когда она — первая в списке). Но сейчас не об этом, а — хотел бы попросить Вас объяснить физику вот этого фрагмента из «SelectModemDialog.cs»:
          private void ScanForModems()
          { // Очищаем список модемов
          lbModems.Items.Clear();
          ManagementObjectSearcher searcher = new ManagementObjectSearcher(«select * from Win32_POTSModem»);
          ManagementObjectCollection systemModems = searcher.Get();
          foreach (ManagementObject mdm in systemModems)
          { if (mdm[«Status»].ToString() == «OK»)
          {lbModems.Items.Add(mdm[«Description»].ToString());}
          }
          if (lbModems.Items.Count > 0)
          {lbModems.SelectedIndex = 0;}
          }
          Понятно, что «ManagementObjectSearcher» использует ф-ции WMI. Но что означает
          «if (mdm[«Status»].ToString() == «OK» » внутри цикла — непонятно.
          Это — сканирование реестра?

          1. А что тут непонятного? Ежу ясно, что здесь идет перебор всех объектов системы типа «Win32_POTSModem». В цикле получаем объект модема и проверяем его свойство «Status», для действующего модема оно равно «OK». Если так и есть — добавляем модем в список… Модемы которые отключены система тоже помнит, но статус у них будет не ОК. И причем тут реестр? Это Windows Management Instrumentation, WMI, и не более того…

            Вообще, зря вы ввязались в этот проект не зная языка. Имхо неудачный выбор. Я не в состоянии научить вас языку, у меня для этого нет ни времени, ни желания…

  2. Спасибо тебе за рождение этой проги! не плохо было бы если эта программа могла бы просто принимать смс сохраняя их как отдельные тхт файлы жилательно с изменяемыми пораметрами выходного файла имя, расширения или передавать через переменные 🙂 заточка под командную строку! Получется управление сервером СМСками! Кстати с пересылкой на почту вопрос решится путем bat файлика

  3. 11.06.2012 21:35:57: Command: AT+CMGF=0
    Error: True
    Modem Reply: AT+CMGF=0

    ERROR

    ———-

    11.06.2012 21:35:57: Произошла ошибка при приеме ответа на команду AT+CMGF=0:
    AT+CMGF=0

    ERROR

  4. Вот такие у меня ошибочки выплывают, ни отправить не получается sms, ни пере адресацию сделать. Хотя при тесте выдает что все ОК с модемом

  5. если использовать в качестве модема сотовый телефон то почему-то не работает, а так отправляет! (если в ручную написать номер телефона и текст сообщения)

  6. Брат starxxx ответь Мне на маил VirtuTelepfone@mail.ru есть тема для разговора, хотел обсудить возможность написания для Нас одной програмки, Мы оплатим… кстати форум хорош но нет вкладки котакты это странно, жду на маил Брат

  7. Я так понимаю, используется USB GSM-модем? А настройки прикручены от com-порта. Как связать модем с программой, чтоб отправка сообщения на e-mail уходила?

  8. Здравствуйте, очень полезная программа, но увы и ах отправка не работает на почту.
    Видимо защищенная отправка невозможна:

    Исходящая почта
    адрес почтового сервера — smtp.yandex.ru;
    защита соединения — SSL;
    порт — 465.

    Есть ли в планах добавить эту возможность?

  9. чувствую не работает отправка т.к. нет возможности включить шифрование SSL. А его требует и гугло-почта и яндекс-почта. Допилите свою софтину, плз

  10. сделал свой смтп сервер с блек-джеком и без ссл, все работает. спасибо автору и респект. Если сделаешь галочку ссл — будет тебе особая уважуха от мучающихся с твоей прогой юзверей 🙂

  11. Уважаемые хард и софт, хотим сказать вам «Спасибо» за некоторые советы, ответы на наши вопросы и возможно, не факт, доработки по этой проге. «Спасибо» будет щедрым. Обделенных не будет. Прошу ответить в скором времени.

  12. Доброго времени суток.
    У меня возникли сложности при использовании программы.

    Command: AT+CMGF=0

    Error: True

    Modem Reply: AT+CMGF=0

    ERROR

    ———-

    Произошла ошибка при приеме ответа на команду AT+CMGF=0:

    AT+CMGF=0

    ERROR

    и также

    Ошибка открытия порта модема

    ни принять ни отправить смс не могу

  13. Здравствуйте! У меня сим карта Мегафон стоит в модеме, мне бы хотелось настроить переадресацию смс с этой симки на электронную почту. Сможете сделать? Сколько будет стоить?

  14. День добрый! Модем Хуавей Е171, оператор мтс, софт хуавеймодем 11.300 — поставил Вашу прогу — пока инет не подключаю все работает как часы — как только подключаю — Ваша программа ругается:»Ошибка открытия порта модема». Хотя с софта модема смс идут как при отключеном, так и при активном инете. Это можно исправить? С Уважением.

  15. За доработку программы ,готов заплатить ,саяжись плз восемь 90три пять82 9девять 90

  16. программа грузит цп на 50% примерно на 2 минуты при получении смс и «показать все». С прошивкой от мегафона были ошибки с удалением (не удалялись смс) и просмотром всех смс, перепрошивка модема помогла. Мегафон м150-2 (Huawey e3272). Осталась проблема зависания, заполнения смс и по факту не работающий сброс на почту (нет ssl), думал увижу исходники и наступит просветление, но даже ат команд не увидел… если можете помочь — свяжитесь со мной по почте

  17. За ссылкой «Скачать» написано: Forbidden
    You don’t have permission to access /wp-content/uploads/delightful-downloads/2014/12/SMSForwarder.zip on this server.

Добавить комментарий для Виталий Отменить ответ

Ваш адрес email не будет опубликован. Обязательные поля помечены *