![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как отправить файл на почту на чистом Delphi [D7, Win95/98, WinME, Win2k, WinXP]
l.a_ © (2004-11-20 12:03:00)Помогите пожалуйста!!!!!!!!!!!!!!
С сетью работаю недавно! Как отправить файл на почту на чистом Delphi
Rouse_ (2004-11-22 22:25:00) [1]> на чистом Delphi
;)))))
Ох, долго я так не смеялся ;)))
IdSMTP1.QuickSend('кому', 'по какой теме', '', '', 'Чувак, тебе письмо...');
DelphiN! (2004-11-22 07:14:00) [2]
> [2] XProger © (20.11.04 16:29)
Чтобы файл послать смотри как это делается в RFC по SMTP
DelphiN! (2004-11-22 07:11:00) [3]//Пример: SendMail('smtp.yandex.ru',25,'fromdelphin@yandex.ru','todelphin@yandex.ru','Tema_Soobshenia','Text soobshenia');
Uses WinSock;
...
Function SendMail(SMTP:String;Port:Integer;From,_To,Subject,Text:String):Boolean;
var
wsadata: TWSADATA;
sin: TSockAddrIn;
sock: TSocket;
MySmtp : String;
iaddr: Integer;
buf: array[0..255] of char;
// Процедура посимвольной отправки данных
procedure Mys(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;
//Имя сервера в IP адрес
function HostToIP(name: string; var Ip: string): Boolean;
var
wsdata : TWSAData;
hostName : array [0..255] of char;
hostEnt : PHostEnt;
addr : PChar;
begin
WSAStartup ($0101, wsdata);
try
gethostname (hostName, sizeof (hostName));
StrPCopy(hostName, name);
hostEnt := gethostbyname (hostName);
if Assigned (hostEnt) then
if Assigned (hostEnt^.h_addr_list) then begin
addr := hostEnt^.h_addr_list^;
if Assigned (addr) then begin
IP := Format ('%d.%d.%d.%d', [byte (addr [0]),
byte (addr [1]), byte (addr [2]), byte (addr [3])]);
Result := True;
end
else
Result := False;
end
else
Result := False
else begin
Result := False;
end;
finally
WSACleanup;
end
end;
begin
HostToIP(SMTP,MySmtp);
//Инициализируем сокет для соединения сервером smtp.yandex.ru
WSAStartUp(257, wsadata);
sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
sin.sin_family := AF_INET;
htons(Port);
sin.sin_port := htons(Port);
iaddr:=inet_addr(PChar(MySmtp));
sin.sin_addr.S_addr:=iaddr;
// Соединение
connect(sock,sin,sizeof(sin));
// Получим от сервера ответ
recv(sock,buf,sizeof(buf),0);
// HELO SERVER
// Запускаем процу посимвольной отправки строки
Mys('HELO yandex.ru'+#13+#10);
// Получим от сервера ответ
recv(sock,buf,sizeof(buf),0);
// MAIL TO:
Mys('MAIL FROM: '+_To+#13+#10);
recv(sock,buf,sizeof(buf),0);
// RCPT TO:
Mys('RCPT TO: '+_To+#13+#10);
recv(sock,buf,sizeof(buf),0);
// DATA
Mys('DATA'+#13+#10);
recv(sock,buf,sizeof(buf),0);
Text := 'From:<'+From+'>'+#13#10+'TO:<'+_To+'>'+#13#10+'Subject:'+Subject+'_'+datetostr(date)+#13#10+'Content-Type: text/plain; charset="windows-1251"'+#13#10+'X-Priority: 3'+#13#10+'X-Mailer: Ruki.sys'+#13#10+Text;
// Отправка информации
Mys(Text+#13+#10);
// .
Mys(#13+#10+'.'+#13+#10);
recv(sock,buf,sizeof(buf),0);
// QUIT
Mys('QUIT'+#13+#10);
recv(sock,buf,sizeof(buf),0);
//Анализируем результат на ошибки
if WSAGetLastError = 0 then
Result := true
else
Result := false;
// Закрываем сокет
closesocket(sock);
end;
XProger (2004-11-20 16:29:00) [4]А если хочешь всё ручками, и чтобы весило мало - WinSock
и RFC по SMTP протоколу
Anatoly Podgoretsky (2004-11-20 15:18:00) [5]На чистом Дедьфи, тогда используй Инди