Перед тем как отправлять смс, на трубе должна быть активирована функция "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); } } //---------------------------------------------------------------------
|
|