Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 8 октября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

ПРОГРАММИРОВАНИЕ НА C и С++



Давно заметил, что всё-таки языки С/C++ это не самый лучший вариант программирования под Windows. Сейчас появилась масса более современных и удобных языков, например тот же Python - кроссплатформенный язык, очень легок в изучение. Я его изучил буквально за несколько дней по этому курсу - ссылка. Автор постарался, там видеоуроки на удивление легкие и понятные.
Как сделать отправку e-mail из программы или что-то типа регистрации?
пример в чистом API. Думаю, что должен сработать в любом Си-компиляторе:


#define SMTP_PORT 25 //порт почтового сервера
#define SMTP_ADDR "128.1.1.1" //Айпишник почтового сервера

SOCKET nSMTPServerSocket;
struct sockaddr_in smtp_address;
int nConnect;
int iLength;
int iMsg = 0;
int iEnd = 0;
BYTE sBuf[4096];

char *MailMessage[] =
{
"HELO domain.ru\r\n",
"MAIL FROM:<",
"RCPT TO:<vasya@pupkin.ru>\r\n",
"DATA\r\n",
"",
"QUIT\r\n",
NULL
};

lstrcat(MailMessage[1], "purpe@sources.ru>\r\n");
lstrcat(MailMessage[4],"Hello world\r\n\r\n.\r\n");

nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0);

if(nSMTPServerSocket != INVALID_SOCKET) {
smtp_address.sin_family = AF_INET;
smtp_address.sin_addr.s_addr = inet_addr(SMTP_ADDR);
smtp_address.sin_port = htons(SMTP_PORT);

nConnect = connect(nSMTPServerSocket, (PSOCKADDR)&smtp_address, sizeof(smtp_address));

if(nConnect) { }
else {
do {
iLength = recv(nSMTPServerSocket, (LPSTR)sBuf+iEnd, sizeof(sBuf)-iEnd, 0);
iEnd += iLength;
sBuf[iEnd] = '\0';
send(nSMTPServerSocket, (LPSTR)MailMessage[iMsg], strlen(MailMessage[iMsg]), 0);
iMsg++;
} while(MailMessage[iMsg]);
}

closesocket(nSMTPServerSocket);
}

Возникает ошибка в результате работы проги здесь: nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0);
->>
nSMTPServerSocket == INVALID_SOCKET
и в результате ничего не отправляется! Не забудьте в начале своей проги добавить строчечки:

int rc;
WSADATA WSAData;

rc = WSAStartup(MAKEWORD(1, 1), &WSAData);
if(rc != 0) return FALSE;


а то ведь без них бесполезно создавать сокеты ...

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

Если пишешь под MFC , то при создании каркаса приложения при помощи визарда, необходимо на одном из шагов поставить галочку в типа Enable Windows Sockets (или что-то вроде этого, точно не вспомню). При этом в начало функции InitInstance() добавится следующее:

if (!AfxSocketInit())
{
AfxMessageBox(IDP_SOCKETS_INIT_FAILED);
return FALSE;
}

это равносильно тем строчечкам, про которые ты спросил :)

Так как я пишу с исп. MFC, то я добавил строчки в InitInstance(). Счас эта ошибка уже не возникает, но прога зависает при отправке!
Меня интересуют сторчки:
#define SMTP_PORT 25 //порт почтового сервера
#define SMTP_ADDR "128.1.1.1" //Айпишник почтового сервера

Где выкапать Айпишник почтового сервера?
В досовском окошке пишешь следующую команду:

tracert mail.server.com

там и увидишь айпишник твоего почтового сервера. Ну а если ты ещё даже не представляешь, что такое почтовый сервер и почему без него не обойтись при отправке почтовых сообщений, то тебе надобно где-то почитать немного теории по ентому поводу.
Был такой троян, Hoooker назывался. Не помню, с какого .ru-сайта его скачал, но исходники есть. Там всё очень доступно сделано, никаких мозгосушливых изворотов a-la BO2K :-) Если надо, могу закинуть в мыло.

char *MailMessage[] =
{
"HELO domain.ru\r\n",
"MAIL FROM:<",
"RCPT TO:<vasya@pupkin.ru>\r\n",
"DATA\r\n",
"",
"QUIT\r\n",
NULL
};

lstrcat(MailMessage[1], "purpe@sources.ru>\r\n");
lstrcat(MailMessage[4],"Hello world\r\n\r\n.\r\n");

После таких lstrcat-ов должно глючить по страшному %)

<< ВЕРНУТЬСЯ В ПОДРАЗДЕЛ

<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ




Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS