Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Как отправить E-Mail


Автор: Alex103 1.4.2005, 05:17
Как отправить письмо но только так что-бы у пользователя не появлялась программа для почты а просто пошло письмо на адресс указаный заранее!!! У меня нет мыслей к этому вопросу, может вы что нибудь посоветуете!!!!!

Автор: FRAGNATIC 1.4.2005, 05:26
Код

unit SendMailTo;

interface

uses WinSock, SysUtils, Windows;  // не забудь этот модуль для работы с сокетами

function sendmail(const smtp, mail_from, mail_to, body: string): boolean;

implementation

function sendmail(const smtp, mail_from, mail_to, body: string): boolean;

const ok = '250';
       cl = #13#10;

var WSAData: TWSAData;
   Host: TSockAddrIn;
   Sock: TSocket;
   res: integer;
   hostEnt: PHostEnt;

 { отправляем данные через сокет }
 procedure senddata(str: string);
 var i: integer;
 begin
   for i := 1 to length(str) do
     if send(sock, str[i], 1, 0) = SOCKET_ERROR then exit;
 end;

 { получаем ответ от команды }
 function recvdata(const accept: string): bool;
 var buff: array[1..255] of char;
 begin
   res := recv(Sock, buff, 255, 0);
   result := (res = SOCKET_ERROR) or (copy(buff, 1, 3) = accept);
 end;

begin
 result := false;
 try
   WSAStartUp($101, WSAData);
   Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
   if Sock = INVALID_SOCKET then exit;

   // получаем IP адрес SMTP-сервера и переводим его через inet_addr
   hostEnt := gethostbyname(PChar(smtp));
   if hostEnt = nil then exit;
   res := inet_addr(PChar(inttostr(byte(hostEnt^.h_addr_list^[0]))+'.'+inttostr(byte(hostEnt^.h_addr_list^[1]))+'.'+
            inttostr(byte(hostEnt^.h_addr_list^[2]))+'.'+inttostr(byte(hostEnt^.h_addr_list^[3]))));
   if res <= 0 then exit;
   { устанавливаем хост и порт сервера }
   Host.sin_family := AF_INET;
   Host.sin_port := htons(25); // порт 25, можешь поменять
   Host.sin_addr.S_addr := res;

   if connect(Sock, Host, SizeOf(Host)) > 0 then exit;
   sleep(200);
   if not recvdata('220') then exit; // приветствие сервера
   senddata('HELO SANTA' + cl); // после HELO можешь написать свое приветствие
   sleep(200);
   if not recvdata(ok) then exit;
   senddata('MAIL FROM:' + '<'+mail_from+'>' + cl);
   sleep(200);
   if not recvdata(ok) then exit;
   senddata('RCPT TO:' + '<'+mail_to+'>' + cl);
   sleep(200);
   if not recvdata(ok) then exit;
   senddata('DATA' + cl);
   sleep(200);
   if not recvdata('354') then exit;
   senddata(body + cl + '.' + cl); // отправляем текст сообщения
   sleep(200);
   if not recvdata(ok) then exit;
   senddata('QUIT' + cl); // отключаемся от сервера
   result := true;
 finally
   closesocket(sock);
   WSACleanup
 end;
end; 
end.

использование
Код

sendmail('smtp.inbox.ru', '[email protected]', '[email protected]', 'hello there!')

автор вроде как DarkDaemon )
Добавлено @ 05:27
опять е можно через всякие компоненты слать + в ДРКБ вроде тож есть примеры

Автор: Alex103 1.4.2005, 05:30
Цитата(FRAGNATIC @ 1.4.2005, 05:26)
Код

unit SendMailTo;

interface

uses WinSock, SysUtils, Windows;  // не забудь этот модуль для работы с сокетами

function sendmail(const smtp, mail_from, mail_to, body: string): boolean;

implementation

function sendmail(const smtp, mail_from, mail_to, body: string): boolean;

const ok = '250';
       cl = #13#10;

var WSAData: TWSAData;
   Host: TSockAddrIn;
   Sock: TSocket;
   res: integer;
   hostEnt: PHostEnt;

 { отправляем данные через сокет }
 procedure senddata(str: string);
 var i: integer;
 begin
   for i := 1 to length(str) do
     if send(sock, str[i], 1, 0) = SOCKET_ERROR then exit;
 end;

 { получаем ответ от команды }
 function recvdata(const accept: string): bool;
 var buff: array[1..255] of char;
 begin
   res := recv(Sock, buff, 255, 0);
   result := (res = SOCKET_ERROR) or (copy(buff, 1, 3) = accept);
 end;

begin
 result := false;
 try
   WSAStartUp($101, WSAData);
   Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);
   if Sock = INVALID_SOCKET then exit;

   // получаем IP адрес SMTP-сервера и переводим его через inet_addr
   hostEnt := gethostbyname(PChar(smtp));
   if hostEnt = nil then exit;
   res := inet_addr(PChar(inttostr(byte(hostEnt^.h_addr_list^[0]))+'.'+inttostr(byte(hostEnt^.h_addr_list^[1]))+'.'+
            inttostr(byte(hostEnt^.h_addr_list^[2]))+'.'+inttostr(byte(hostEnt^.h_addr_list^[3]))));
   if res <= 0 then exit;
   { устанавливаем хост и порт сервера }
   Host.sin_family := AF_INET;
   Host.sin_port := htons(25); // порт 25, можешь поменять
   Host.sin_addr.S_addr := res;

   if connect(Sock, Host, SizeOf(Host)) > 0 then exit;
   sleep(200);
   if not recvdata('220') then exit; // приветствие сервера
   senddata('HELO SANTA' + cl); // после HELO можешь написать свое приветствие
   sleep(200);
   if not recvdata(ok) then exit;
   senddata('MAIL FROM:' + '<'+mail_from+'>' + cl);
   sleep(200);
   if not recvdata(ok) then exit;
   senddata('RCPT TO:' + '<'+mail_to+'>' + cl);
   sleep(200);
   if not recvdata(ok) then exit;
   senddata('DATA' + cl);
   sleep(200);
   if not recvdata('354') then exit;
   senddata(body + cl + '.' + cl); // отправляем текст сообщения
   sleep(200);
   if not recvdata(ok) then exit;
   senddata('QUIT' + cl); // отключаемся от сервера
   result := true;
 finally
   closesocket(sock);
   WSACleanup
 end;
end; 
end.

использование
Код

sendmail('smtp.inbox.ru', '[email protected]', '[email protected]', 'hello there!')

автор вроде как DarkDaemon )
Добавлено @ 05:27
опять е можно через всякие компоненты слать + в ДРКБ вроде тож есть примеры

у меня как то впроде нет SysUtils. Ато компилятор говорит что SysUtils неопознаный обьект!

Автор: FRAGNATIC 1.4.2005, 05:32
чё? всмысле нету сисутился? этот модуль есть у всех он сразу с дэлфи идёт без него не куда)
и вообще этот код на ура работает)

Автор: Alex103 1.4.2005, 05:35
Цитата(FRAGNATIC @ 1.4.2005, 05:32)
чё? всмысле нету сисутился? этот модуль есть у всех он сразу с дэлфи идёт без него не куда)
и вообще этот код на ура работает)

У меня при компиляции ошибок штук 5 вылетает!!!!

Автор: FRAGNATIC 1.4.2005, 05:39
у меня не одной ошибки просто берёш это записываеш в отдельный модуль соранееш в папке со своим проектом потом пишеш в главном модуле
uses SendMailTo
после чего из главно модуля отправляеш письмо вот таким вот образом
sendmail('smtp.inbox.ru', '[email protected]', '[email protected]', 'hello there!')

smile всё гудбай) хватит с меня на сегодня пойду спать а то ща вся моя родня уже проснётся и начнут на меня гнать чё я не сплю smile smile smile
удачи ) пока я буду спать местные гуру проснутся и те всё растолкуют)

Автор: Alex103 1.4.2005, 06:03
Цитата(FRAGNATIC @ 1.4.2005, 05:39)
у меня не одной ошибки просто берёш это записываеш в отдельный модуль соранееш в папке со своим проектом потом пишеш в главном модуле
uses SendMailTo
после чего из главно модуля отправляеш письмо вот таким вот образом
sendmail('smtp.inbox.ru', '[email protected]', '[email protected]', 'hello there!')

А у меня что-то письма не отправляються хотя и скомпилировалось все без ошибок!!!

Автор: FRAGNATIC 1.4.2005, 06:07
ну эт уже смотря куда слать тк такие письма по большей части за спам считают + смотри прально смтп сервак укажи) вообще тэсти на инбокс ру и письа ищи в папке подозрительные вроде ну вообще не во входящих а в спаме)
Добавлено @ 06:07
вообще юзай компонеты
для этого оч много компонентов есть тип ICS

Автор: Alex103 1.4.2005, 06:10
Цитата(FRAGNATIC @ 1.4.2005, 06:07)
ну эт уже смотря куда слать тк такие письма по большей части за спам считают + смотри прально смтп сервак укажи) вообще тэсти на инбокс ру и письа ищи в папке подозрительные вроде ну вообще не во входящих а в спаме)
Добавлено @ 06:07
вообще юзай компонеты
для этого оч много компонентов есть тип ICS

Прописываю я следующее

Код

sendmail('mail.ck.ukrtel.net', '[email protected]', '[email protected]', 'hello there!');


А теперь скажи мне куда пойдет это письмо!!

Автор: FRAGNATIC 1.4.2005, 06:14
на '[email protected]'
то вот желательно прописать в от кого тож '[email protected]'
и в смтп тот смтп серер на котором '[email protected]' тоесть твой)

Автор: Alex103 1.4.2005, 06:18
Цитата(FRAGNATIC @ 1.4.2005, 06:14)
на '[email protected]'
то вот желательно прописать в от кого тож '[email protected]'
и в смтп тот смтп серер на котором '[email protected]' тоесть твой)

Хорошо а зачем тогда [email protected]!!!
А если я прописываю СМПТ своего серрвака а не почты то это разве что-то меняет!!

Автор: Alex 1.4.2005, 06:59
http://forum.vingrad.ru/index.php?act=module&module=vingradfaq§ion=770

Автор: Alex103 2.4.2005, 01:02
Мне хоть кто-то подскажет как отправить письмо!!

Автор: Alex 2.4.2005, 01:09
Цитата(Alex103 @ 2.4.2005, 01:02)
Мне хоть кто-то подскажет как отправить письмо!!

В FAQ 5 способов. Чем еще тебе можно помочь?

Автор: Wowa 2.4.2005, 01:09
Цитата(Alex103 @ 1.4.2005, 23:02)
Мне хоть кто-то подскажет как отправить письмо!!

чего кричишь? тебе ведь дал Алекс ссылку на FAQ.

Автор: FRAGNATIC 2.4.2005, 01:11
я тебе дал полнастью рабочий код который у меня пашет отлично
Цитата
Хорошо а зачем тогда [email protected]!!!
А если я прописываю СМПТ своего серрвака а не почты то это разве что-то меняет!!

ну [email protected] это тип от кого письмо здесь лучше укаывать своё мыло ну мож и другое любое )
СМТП нужно указывать того сервера на котором твоё мыло а именно мыло НА которое пойдёт письмо!
+ в FAQ загляни)

Автор: Alex103 3.4.2005, 00:59
Цитата(Alex @ 2.4.2005, 01:09)
Цитата(Alex103 @ 2.4.2005, 01:02)
Мне хоть кто-то подскажет как отправить письмо!!

В FAQ 5 способов. Чем еще тебе можно помочь?

Да я не спорю что в ФАКЮ все есть но там такие большущие кода что офигеть можно. А мне ребята знакомые говорили что когда они делали то же что и я то писали всего навсего 3 строки кода!!

Автор: Alex 3.4.2005, 01:03
Цитата(Alex103 @ 3.4.2005, 00:59)
Да я не спорю что в ФАКЮ все есть но там такие большущие кода что офигеть можно. А мне ребята знакомые говорили что когда они делали то же что и я то писали всего навсего 3 строки кода!!

Говорить можно сколько угодно. Пусть покажут.

Автор: FRAGNATIC 3.4.2005, 01:03
Цитата
писали всего навсего 3 строки кода!!

в одну строку можно записать оч много при желании)
ну вот пускай они дадут те этот код чудесный)
+ при использвание компонентов строк будет не на много больше)

Автор: Alex103 3.4.2005, 01:05
Цитата(Alex @ 3.4.2005, 01:03)
Цитата(Alex103 @ 3.4.2005, 00:59)
Да я не спорю что в ФАКЮ все есть но там такие большущие кода что офигеть можно. А мне ребята знакомые говорили что когда они делали то же что и я то писали всего навсего 3 строки кода!!

Говорить можно сколько угодно. Пусть покажут.

Ок я их спрошу!!!! А пока лучше загляну в Факю может ты действительно прав!!!

Автор: Alex 3.4.2005, 01:24
Цитата(Alex103 @ 3.4.2005, 01:05)
А пока лучше загляну в Факю может ты действительно прав!!!

Сделай одолжение загляни и желательно туда заглядывать, до того как задавать вопрос. smile

Автор: FRAGNATIC 3.4.2005, 03:20
загляни ещё сюда http://forum.vingrad.ru/index.php?showtopic=21411
тама тож куча примеров на посл стр есть что-то про мыло)

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