Автор
|
Тема: Отправка e-mail из проги?
|
Vig |
опубликован 12-07-2001 09:07 MSK
Как сделать отправку e-mail из программы или что-то типа регистрации?
|
Demo_S
|
опубликован 12-07-2001 17:41 MSK
просто.неужели никто никогда не читает предыдущих постов перед тем как зафигарить свой вопрос? |
purpe
|
опубликован 12-07-2001 21:12 MSK
пример в чистом 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); }
|
purpe
|
опубликован 12-07-2001 21:14 MSK
Хе :) наворотил аднако :) просто раньше это использовалось в проге типа трояшки, которая мне сообщала на мыло - кто из юзеров сервера во сколько врубил свой комп :)
|
Vig
|
опубликован 13-07-2001 08:16 MSK
Вот Я вначале это и попробовал, но у меня возникает ошибка в результате работы проги здесь: nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0); ->> nSMTPServerSocket == INVALID_SOCKET и в результате ничего не отправляется! |
purpe
|
опубликован 13-07-2001 09:19 MSK
А ты не забыл в начале своей проги добавить строчечки:int rc; WSADATA WSAData; rc = WSAStartup(MAKEWORD(1, 1), &WSAData); if(rc != 0) return FALSE; а то ведь без них бесполезно создавать сокеты ...
|
Vig
|
опубликован 14-07-2001 08:36 MSK
А можно по подробнее об этих строчечках? Где конкретнее их вставлять? и что они значат? У меня проект типа SDI. |
purpe
|
опубликован 14-07-2001 10:43 MSK
эти строчечки инициализируют работу с сокетами для твоей программы. Эти строчки обычно необходимы в самом начале любой Win32 API программы, которая будет работать с сокетами.Если пишешь под MFC , то при создании каркаса приложения при помощи визарда, необходимо на одном из шагов поставить галочку в типа Enable Windows Sockets (или что-то вроде этого, точно не вспомню). При этом в начало функции InitInstance() добавится следующее: if (!AfxSocketInit()) { AfxMessageBox(IDP_SOCKETS_INIT_FAILED); return FALSE; } это равносильно тем строчечкам, про которые ты спросил :) |
Vig
|
опубликован 15-07-2001 15:56 MSK
Так как я пишу с исп. MFC, то я добавил строчки в InitInstance(). Счас эта ошибка уже не возникает, но прога зависает при отправке! Меня интересуют сторчки: #define SMTP_PORT 25 //порт почтового сервера #define SMTP_ADDR "128.1.1.1" //Айпишник почтового сервераГде выкапать Айпишник почтового сервера?
|
purpe
|
опубликован 15-07-2001 22:40 MSK
в досовском окошке пишешь следующую команду:tracert mail.server.com там и увидишь айпишник твоего почтового сервера. Ну а если ты ещё даже не представляешь, что такое почтовый сервер и почему без него не обойтись при отправке почтовых сообщений, то тебе надобно где-то почитать немного теории по ентому поводу.
|
Molibden
|
опубликован 16-07-2001 13:32 MSK
Был такой троян, Hoooker назывался. Не помню, с какого .ru-сайта его скачал, но исходники есть. Там всё очень доступно сделано, никаких мозгосушливых изворотов a-la BO2K :-) Если надо, могу закинуть в мыло. |
Vig
|
опубликован 16-07-2001 13:38 MSK
mail.server.com - что вместо этого писать?На счет трояна, так мое мыло: vig@tut.by Заранее благодарю! |
purpe
|
опубликован 16-07-2001 14:10 MSK
а ты почту откуда забираешь ?вопчим вместо mail.server.com надо написать тоже, что обычно в Outlook Express в свойствах учётной записи, в закладке "Серверы", пункты "Входящая почта (POP3)" или "Исходящая почта (SMTP)"
|
breeder
|
опубликован 16-07-2001 14:11 MSK
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-ов должно глючить по страшному %) |
purpe
|
опубликован 16-07-2001 14:13 MSK
а вообще, если ты не представляешь себе в деталях процесса отправки почтового письма, то исходник трояна будет тебе как мёртвому припарка, так как обычно в таких программульках всё намного сложнее.вот такие брат дела ...
|
purpe
|
опубликован 16-07-2001 14:15 MSK
2breeder:ну так я ж привёл пример для чистого API , при том, что постоянно в массив надо было разные адреса подставлять :) извиняюсь конечно, что не привёл моменты выделения памяти и её освобождения, но цель примера немного в другом :)
|
Vig
|
опубликован 17-07-2001 09:02 MSK
Вообще я эти lstrcat(MailMessage[1], "purpe@sources.ru>\r\n"); lstrcat(MailMessage[4],"Hello world\r\n\r\n.\r\n");не использовал (все писал в char *...) Но не могу понять как определяется почтовый ящик в который отправляется письмо. Так "Входящая почта (POP3)" или "Исходящая почта (SMTP)"? На mail.ru это разные сервера! pop.mail.ru smtp.mail.ru |
breeder
|
опубликован 17-07-2001 09:59 MSK
"RCPT TO: <vasya@pupkin.ru>\r\n" - писмьмо будет отправлено на vasya@pupkin.ruЕсли ты хочешь отправлять почту, то тебе соотвественно нужен хост для исходящей почты %) |
purpe
|
опубликован 17-07-2001 10:02 MSK
ну значит тебе нужно smtp.mail.ruа вообще, в 1001 раз советую тебе почитать про протоколы отправки и получения почты: http://www.sources.ru/protocols/smtp_learning.shtml http://www.sources.ru/protocols/pop3_learning.shtml
|
Vig
|
опубликован 20-07-2001 08:27 MSK
Как выделять и освобождать память для этих lstrcat(MailMessage[1], "purpe@sources.ru>\r\n"); lstrcat(MailMessage[4],"Hello world\r\n\r\n.\r\n"); ? |
Vig
|
опубликован 26-07-2001 08:53 MSK
purpe ответь пожалуйсто на поставленый выше вопрос. |
cube
|
опубликован 26-07-2001 09:17 MSK
Память нужно выделять для буфера-результата. Для этого есть new. |
purpe
|
опубликован 26-07-2001 09:30 MSK
2Vig: для этих ничего выделать не нада :) само по себе объявлениеchar *MailMessage[] = { "HELO domain.ru\r\n", "MAIL FROM:<", "RCPT TO:<vasya@pupkin.ru>\r\n", "DATA\r\n", "", "QUIT\r\n", NULL }; уже нормально располагается в памяти :) |