Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Отправить SMS используя сокеты?


Автор: Alca 25.6.2008, 12:51
Отправить SMS используя сокеты?

Автор: jonie 25.6.2008, 18:31
делай. разрешаем.

Автор: Alca 25.6.2008, 19:31
 smile  smile 

Автор: LostSoul 25.6.2008, 20:52
Для этого есть  мног веб-сервисов http://www.google.com.ua/search?hl=ru&client=firefox-a&rls=org.mozilla%3Aru%3Aofficial&hs=Xtt&q=%D0%9E%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D1%82%D1%8C+SMS&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&meta=
В приложении можно загружать код подтверждения(капчу) и отправлять POST запрос.
А если напрямую, то там вроде-бы надо GSM-модем подключать или еще что-то.

Автор: xvr 26.6.2008, 12:01
Цитата(Alca @ 25.6.2008,  12:51)
Отправить SMS используя сокеты?

Хм, а в какой сокет засунут сотовый телефон?  smile 

Автор: Alca 26.6.2008, 14:06
Цитата

делай. разрешаем.

jonie! Ну что? Я замутил. Код выкладывать???

Автор: Andrey44 26.6.2008, 14:19
Alca, давай, очень интересно smile 

Автор: Alca 26.6.2008, 16:32
Перед тем как отправлять смс, на трубе должна быть активирована функция "E-mail to SMS".
Необходимо отправить смс на номер (например, у меня Киевстар) - 7021.
Киевстар отключил получение СМС сообщений с e-mail для всех своих пользователей по умолчанию. Для разблокировки вам нужно послать любое сообщение на адрес 7021. Это может сделать только владелец номера. Есть сведения, что разблокировка происходит через сутки после отсылки сообщения. За более подробной информацией обращайтесь с службу поддержки Киевстар.
Правда не на сокетах, а на ATL:
Код

#define WIN32_LEAN_AND_MEAN

#include "stdafx.h"
#include <windows.h>
#include <iostream.h>

#include "CSMTPConn.cpp"        //bSendSMS()

#define MAIL_ADDRESS "[email protected]"    
#define SENDER       "xxxx"            
#define RECIPIENT    "[email protected]"
#define DNS_SERVER   "sms.kyivstar.net"     //You need to specify the domain name of the recipient email address
//шлюзы - http://www.sms-send.org.ua/sms_gate/
//---------------------------------------------------------------------------
bool bSendSMS() {
    ::CoInitialize(0);
    { 
        CMimeMessage msg;       
        msg.SetSender    (MAIL_ADDRESS);
        msg.SetSenderName(SENDER);
        msg.AddRecipient (RECIPIENT);
        msg.SetSubject   ("Alert");
        msg.AddText      ("");
        //msg.AttachFile ("some file path");
        msg.SetPriority  (ATL_MIME_HIGH_PRIORITY);    
        //ATL_MIME_HIGH_PRIORITY   = 1, ATL_MIME_NORMAL_PRIORITY = 3, ATL_MIME_LOW_PRIORITY = 5, ATL_MIME_PRIORITY_ERROR  = 0

        CSMTPConn Conn;
        if (Conn.Connect(DNS_SERVER)) {
            if (Conn.SendMessage(msg) == TRUE) {
                //--MessageBox(0, "Mail sent successfully", "", MB_OK);
            }
            Conn.Disconnect();    
        }
    }
    ::CoUninitialize();

    return true;
}
//---------------------------------------------------------------------------
int main() {
    bSendSMS();
    return 0;
}
//---------------------------------------------------------------------------




/**********************************************************************
*    CSMTPConn.h
*
***********************************************************************/


#pragma once
#include <atlsmtpconnection.h>
#include <Windns.h>

#pragma comment(lib,"Dnsapi.lib")
//---------------------------------------------------------------------
class CSMTPConn : public CSMTPConnection {
    public:    
        BOOL Connect(LPCTSTR lpszHostDomain, DWORD dwTimeout = 10000) throw();
    
    private:
        void _GetSMTPList(LPCTSTR lpszHostDomain, CSimpleArray<CString>& arrSMTP);
};
//---------------------------------------------------------------------


/**********************************************************************
*    CSMTPConn.cpp
*
***********************************************************************/


#include "StdAfx.h"
#include "CSMTPConn.h"
//---------------------------------------------------------------------
BOOL CSMTPConn::Connect(LPCTSTR lpszHostDomain, DWORD dwTimeout /*= 10000*/) throw() {
    CSimpleArray<CString> arrSMTP;
    _GetSMTPList(lpszHostDomain, arrSMTP);
    for (int i=0; i<arrSMTP.GetSize(); i++) {
        if (CSMTPConnection::Connect(arrSMTP[i], dwTimeout) == TRUE)
            return TRUE;
    }
    return FALSE;
}
//---------------------------------------------------------------------
void CSMTPConn::_GetSMTPList(LPCTSTR lpszHostDomain,  CSimpleArray<CString>& arrSMTP) {
    PDNS_RECORD pRec = NULL;
    if (DnsQuery(lpszHostDomain, DNS_TYPE_MX, DNS_QUERY_STANDARD, NULL, &pRec, NULL) == ERROR_SUCCESS) {
        PDNS_RECORD pRecOrig = pRec;
        while (pRec) {
            if (pRec->wType == DNS_TYPE_MX) {
                arrSMTP.Add(pRec->Data.MX.pNameExchange);
            }
            pRec = pRec->pNext;
        }
        DnsRecordListFree(pRecOrig,DnsFreeRecordList);
    }
}
//---------------------------------------------------------------------

Автор: jonie 26.6.2008, 23:53
не нашел тут никапли про смс. про мыло и MX сервера только что. впрочем это настолько древний баян что и комментировать особо нечего (билайн например уже давно (делал я такое года два назад, тогда еще работало, потом отвалилось чет (сервис в инете висит, и я за него уже не отвечаю)) прикрыли лавочку, а у МТС ее вроде и небыло).

потом еще про спам надо почитать незабыть....
одним словом "это не метод". по мне так проще используя ту же COM оснастку от Nokia слать смс (для нокиа телефонов, конечно).
лично у меня система такая : на телефоне моем стоит jabber клиент, который всегда онлайн. он ждет  комманды с того же JID-а. Я просто пишу на этот JID и клиент отсылает SMS (по-нормальному). просто и эффективно. баловался когда-то давно... 

и...вы еще используете смс?)) это старая и неэффектисная технология. как по деньгам, так и по качеству.

Автор: Alca 27.6.2008, 09:28
Цитата

он ждет  комманды с того же JID-а

Чё за JID?
Цитата

Я просто пишу на этот JID

И как это реализовать?

Автор: Lazin 27.6.2008, 09:39
Jabber

Автор: Alca 15.7.2008, 16:08
Как отправить текст на русском языке?
Код

CMimeMessage msg;       
msg.AddText ("Русский_язык");

Автор: jonie 15.7.2008, 19:40
а msdn почитать про addtext не разрешают?)
Цитата

inline BOOL AddText(
   LPCTSTR szText,
   int nTextLen = -1,
   int nPos = 1,
   UINT uiCodePage = 0
) throw();
©http://msdn.microsoft.com/en-us/library/af73ffkc(VS.80).aspx

Автор: Alca 16.7.2008, 09:22
И чего писать в uiCodePage?
Делал так:
Код

msg.AddText("Русский_язык", -1, 1, 0);

- не получилось

Автор: jonie 17.7.2008, 19:35
Alca да ты не парься, все знаю что хелпы читают тока ламеры.
если не ошибаюсь то тут коды : http://msdn.microsoft.com/en-us/library/ms776446(VS.85).aspx

Автор: Alca 18.7.2008, 12:18
Перепробывал все русские кодировки:
Код

msg.AddText("Русский_язык", -1, 1, /*20866_20880_21025_21866_866_855*/ 1251);

не помогло...

Автор: DominiK 20.7.2008, 09:59
некотрые smtp гейты не едят русский язык.
На форуме qip infium есть мой смс плагин, и модули к нему для 2 операторов, можешь оттуда их стянуть и смотреть как отправлять смс через офф веб сервизы операторов.

Автор: jonie 20.7.2008, 12:14
хз как вы, а я писал в свое время так (билайн, плагин для xchat)
Код

#!/usr/bin/perl -w

IRC::register("beSMS", "0.1", "", ""); 
Xchat::hook_command("SMS","sms_handler");

sub sms_handler { 
    $_ = $_[1][1];
    /(\d{4})(\d+)(.*)/;
    my $qpref   = $1;
    my $number  = $2;
    my $message = $3;
    `lwp-request "http://www.beeonline.ru/servlet/send/sms/?phone=$number&number_sms=number_sms_send&prf=$qpref&termtype=G&message=$message&translit=1&x=5&y=4"`;
    return 0;
}

оно даж ща работает..

забейте вы на смс... старо это и нафиг не нужно никому уже....
проще купить за 2 евро себе 400 смс в месяц и через офиц систему гонять их...

Автор: Alca 21.7.2008, 09:46
DominiK, кинь ссылку - я чего-то не нашел?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)