WWW.ИСХОДНИКИ.РУ cpp.sources.ru
java.sources.ru web.sources.ru soft.sources.ru
jdbc.sources.ru asp.sources.ru api.sources.ru

  Форум на исходниках
  C / C++ / Visual C++
  Отправка e-mail из проги?

СПРОСИТЬ  ОТВЕТИТЬ
профайл | регистрация | faq

Автор Тема:   Отправка e-mail из проги?
Vig опубликован 12-07-2001 09:07 MSK   Click Here to See the Profile for Vig   Click Here to Email Vig  
Как сделать отправку e-mail из программы или что-то типа регистрации?
Demo_S опубликован 12-07-2001 17:41 MSK     Click Here to See the Profile for Demo_S  Click Here to Email Demo_S     
просто.

неужели никто никогда не читает предыдущих постов перед тем как зафигарить свой вопрос?

purpe опубликован 12-07-2001 21:12 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
пример в чистом 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     Click Here to See the Profile for purpe  Click Here to Email purpe     
Хе :) наворотил аднако :) просто раньше это использовалось в проге типа трояшки, которая мне сообщала на мыло - кто из юзеров сервера во сколько врубил свой комп :)
Vig опубликован 13-07-2001 08:16 MSK     Click Here to See the Profile for Vig  Click Here to Email Vig     
Вот Я вначале это и попробовал, но у меня возникает ошибка в результате работы проги здесь: nSMTPServerSocket = socket(PF_INET, SOCK_STREAM, 0);
->>
nSMTPServerSocket == INVALID_SOCKET
и в результате ничего не отправляется!
purpe опубликован 13-07-2001 09:19 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
А ты не забыл в начале своей проги добавить строчечки:

int rc;
WSADATA WSAData;

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


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

Vig опубликован 14-07-2001 08:36 MSK     Click Here to See the Profile for Vig  Click Here to Email Vig     
А можно по подробнее об этих строчечках?
Где конкретнее их вставлять?
и что они значат?
У меня проект типа SDI.
purpe опубликован 14-07-2001 10:43 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
эти строчечки инициализируют работу с сокетами для твоей программы. Эти строчки обычно необходимы в самом начале любой Win32 API программы, которая будет работать с сокетами.

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

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

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

Vig опубликован 15-07-2001 15:56 MSK     Click Here to See the Profile for Vig  Click Here to Email Vig     
Так как я пишу с исп. MFC, то я добавил строчки в InitInstance(). Счас эта ошибка уже не возникает, но прога зависает при отправке!
Меня интересуют сторчки:
#define SMTP_PORT 25 //порт почтового сервера
#define SMTP_ADDR "128.1.1.1" //Айпишник почтового сервера

Где выкапать Айпишник почтового сервера?

purpe опубликован 15-07-2001 22:40 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
в досовском окошке пишешь следующую команду:

tracert mail.server.com

там и увидишь айпишник твоего почтового сервера. Ну а если ты ещё даже не представляешь, что такое почтовый сервер и почему без него не обойтись при отправке почтовых сообщений, то тебе надобно где-то почитать немного теории по ентому поводу.

Molibden опубликован 16-07-2001 13:32 MSK     Click Here to See the Profile for Molibden  Click Here to Email Molibden     
Был такой троян, Hoooker назывался. Не помню, с какого .ru-сайта его скачал, но исходники есть. Там всё очень доступно сделано, никаких мозгосушливых изворотов a-la BO2K :-) Если надо, могу закинуть в мыло.
Vig опубликован 16-07-2001 13:38 MSK     Click Here to See the Profile for Vig  Click Here to Email Vig     
mail.server.com - что вместо этого писать?

На счет трояна, так мое мыло: vig@tut.by

Заранее благодарю!

purpe опубликован 16-07-2001 14:10 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
а ты почту откуда забираешь ?

вопчим вместо mail.server.com надо написать тоже, что обычно в Outlook Express в свойствах учётной записи, в закладке "Серверы", пункты "Входящая почта (POP3)" или "Исходящая почта (SMTP)"

breeder опубликован 16-07-2001 14:11 MSK     Click Here to See the Profile for breeder  Click Here to Email breeder     
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     Click Here to See the Profile for purpe  Click Here to Email purpe     
а вообще, если ты не представляешь себе в деталях процесса отправки почтового письма, то исходник трояна будет тебе как мёртвому припарка, так как обычно в таких программульках всё намного сложнее.

вот такие брат дела ...

purpe опубликован 16-07-2001 14:15 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
2breeder:

ну так я ж привёл пример для чистого API , при том, что постоянно в массив надо было разные адреса подставлять :) извиняюсь конечно, что не привёл моменты выделения памяти и её освобождения, но цель примера немного в другом :)

Vig опубликован 17-07-2001 09:02 MSK     Click Here to See the Profile for Vig  Click Here to Email Vig     
Вообще я эти
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     Click Here to See the Profile for breeder  Click Here to Email breeder     
"RCPT TO: <vasya@pupkin.ru>\r\n" - писмьмо будет отправлено на vasya@pupkin.ru

Если ты хочешь отправлять почту, то тебе соотвественно нужен хост для исходящей почты %)

purpe опубликован 17-07-2001 10:02 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
ну значит тебе нужно 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     Click Here to See the Profile for Vig  Click Here to Email Vig     
Как выделять и освобождать память для этих
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     Click Here to See the Profile for Vig  Click Here to Email Vig     
purpe ответь пожалуйсто на поставленый выше вопрос.
cube опубликован 26-07-2001 09:17 MSK     Click Here to See the Profile for cube  Click Here to Email cube     
Память нужно выделять для буфера-результата. Для этого есть new.
purpe опубликован 26-07-2001 09:30 MSK     Click Here to See the Profile for purpe  Click Here to Email purpe     
2Vig:
для этих ничего выделать не нада :) само по себе объявление

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

уже нормально располагается в памяти :)

СПРОСИТЬ  ОТВЕТИТЬ
Перейти:


E-mail | WWW.ИСХОДНИКИ.RU

Powered by: Ultimate Bulletin Board, Freeware Version 5.10a
Purchase our Licensed Version- which adds many more features!
© Infopop Corporation (formerly Madrona Park, Inc.), 1998 - 2000.