Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как отправить файл на почту на чистом 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]

На чистом Дедьфи, тогда используй Инди


Наверх

Титульная страница Поиск, карта сайта Написать письмо