![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не посылается письмо размером больше 6 кб
FFx01 © (2006-07-27 06:47:00)Пытаюсь выслать сообщение(c аттачем) на e-mail, сообщение посылается, но не больше 6 кб. Как можно выслать сообщение больше этого кол-ва?
Вот примерная процедура посылки сообщения
///--------------------------------------------
uses winsock;
procedure mys(str: String);
var
I: Integer;
begin
for I:=1 to Length(str) do if send(sock,str[I],1,0)=SOCKET_ERROR then exit;
end;
begin
MySmtp:='87.249.30.162';
WSAStartUp(257, wsadata);
sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
sin.sin_family := AF_INET;
htons(25);
sin.sin_port := htons(25);
iaddr:=inet_addr(PChar(MySmtp));
sin.sin_addr.S_addr:=iaddr;
connect(sock,sin,sizeof(sin));
Mys('HELO world'+#13+#10);
Mys('MAIL FROM: user@mail.ru'+#13+#10);
Mys('RCPT TO: sender@nxt.ru'+#13+#10);
Mys('DATA'+#13+#10);
Mys('MIME-Version: 1.0'+#13+#10);
Mys('To: sender@nxt.ru'+#13+#10);
Mys('From: user@mail.ru'+#13+#10);
Mys('Subject: hello world'+#13+#10);
Mys('Date: [e.g Tue, 11 Dec 2002 11:10:00 -0400]'+#13+#10);
Mys('Content-Type: application/octet-stream; name="file.txt"'+#13+#10);
Mys('Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 8bit'+#13+#10);
Mys('Content-Disposition: attachment; filename="file.txt"'+#13+#10);
Mys(''+#13+#10);
//--------------------------------
fName := 'text.txt';
AssignFile(f, fName);
Reset(f);
{$I+}
while not EOF(f) do
begin
readln(f, bufer);
Mys(bufer+#13#10);
end;
CloseFile(f);
//----------------------------
Mys('.'+#13+#10);
Mys('QUIT'+#13+#10);
closesocket(sock);
end.
Ketmar (2006-10-29 00:58:00) [21]всё.
Dmitry_177 (2006-10-29 00:47:00) [22]А все надо в Basr64 отправлять? и txt файлы и exe?
Ketmar (2006-10-28 22:39:00) [23]google.com, "content type boundary". по первой же ссылке -- rfc, где всё написано...
посылать надо base64. где гарантия, что в твоём octet-stream не встретится boundary?
Dmitry_177 (2006-10-28 22:18:00) [24]Читал я... но как послать файл не пойму никак, толи в Base64 надо слать толи еще как, не понятно, если в Base64 то как в него файл перевести и отправить? Правильно ли я задаю параметр boundary? Шлю письмо я так:
function SMTPSendString(AMailSocket: TSocket; Str: String): Boolean;
var
Err: integer;
begin
Str := Str + #13#10;
Err := Send(AMailSocket, Str[1], Length(str), 0);
if Err > 0 then Result := true;
end;
...
SMTPSendString(MailSock, 'MIME-Version: 1.0');
SMTPSendString(MailSock, 'Content-Type: multipart/mixed; boundary=MyBoundary'); // какой должен быть параметр "boundary"? Правильно ли я его задал?
SMTPSendString(MailSock, '--MyBoundary'); // Надо ли слать эту строку?
SMTPSendString(MailSock, 'Content-Type: text/plain; charset=Windows-1251');
SMTPSendString(MailSock, 'Test E-Mail ' + DateTimeToStr(Now));
SMTPSendString(MailSock, '--MyBoundary'); // Надо ли слать эту строку?
SMTPSendString(MailSock, 'Content-Type: application/octet-stream; name="1.txt"');
SMTPSendString(MailSock, 'Content-Disposition: attachment; filename="1.txt"');
// Как послать файл???
SMTPSendString(MailSock, '--MyBoundary--'); // Надо ли слать эту строку?
Ketmar (2006-10-28 00:48:00) [25]наверное, дописать к нему аттач? rfc тебе в руки.
Dmitry_177 (2006-10-27 23:18:00) [26]Подскажите пожалуйста, как отправить письмо с аттачем? Обычное письмо я могу отправить...
Ketmar (2006-07-31 23:44:00) [27]а бинарные файлы протокол SMTP понимать и вовсе не обязан. %-)
ivane (2006-07-31 23:31:00) [28]А попробуй с ним работать, как с бинарным
FFx01 (2006-07-31 22:53:00) [29]Идет посылка текстового файла, есть подозрение, что размер больше 6кб не нравится серверу.
6 и меньше - письмо доходит.
больше 6 -письмо пересылается, но сервер его не обрабатывает.
Пробовал в base64, результат оказался тот же.
Может, есть у кого готовый примерчик посылки текстового файла?.
FFx01 (2006-07-31 22:45:00) [30]
> А ты бинарный файл посылаеш или текстовый и выражение
> readln(f, bufer);
> Mys(bufer+#13#10); - это зачем если файл бинарный
> размер буфера?
> Может так?
> while not EOF(f) do
> begin
> readln(f, bufer);
> Mys(bufer);
> end;
> Mys(#13#10);
> CloseFile(f);
Посылаю текставой
bufer: array[0..255] of char;
Slym (2006-07-31 10:06:00) [31]Поищи по файлу #13#10.#13#10
FireMan_Alexey (2006-07-28 13:53:00) [32]А ты бинарный файл посылаеш или текстовый и выражение
readln(f, bufer);
Mys(bufer +#13#10 ); - это зачем если файл бинарный
размер буфера?
Может так?
while not EOF(f) do
begin
readln(f, bufer);
Mys(bufer);
end;
Mys(#13#10);
CloseFile(f);
Сергей М. (2006-07-27 11:09:00) [33]Пробуй так:
procedure WSACheckResult(Value: Boolean);
begin
if not Value then
raise Exception.Create('ErrorCode ' + IntToStr(WSAGetLastError));
end;
procedure mys(str: String);
var
i, BytesToSend, BytesSent: Integer;
begin
BytesToSend := Length(Str);
i := 1;
while BytesToSend > 0 do begin
BytesSent := send(sock, str[i], BytesToSend, 0);
WSACheckResult(BytesSent <> SOCKET_ERROR);
Dec(BytesToSend, BytesSent);
Inc(i, BytesSent);
end;
end;
...
var
Option: Boolean;
...
MySmtp:='87.249.30.162';
WSAStartUp(257, wsadata);
sock:=socket(AF_INET,SOCK_STREAM,IPPROTO_IP);
WSACheckResult(sock <> INVALID_SOCKET);
try
sin.sin_family := AF_INET;
sin.sin_port := htons(25);
iaddr:=inet_addr(PChar(MySmtp));
sin.sin_addr.S_addr:=iaddr;
Option := True;
WSACheckResult(SetSockOpt(sock, SOL_SOCKET, SO_LINGER, Option, SizeOf(Option)) <> SOCKET_ERROR);
WSACheckResult(connect(sock,sin,sizeof(sin)) <> SOCKET_ERROR);
Mys('HELO world'+#13+#10);
Mys('MAIL FROM: user@mail.ru'+#13+#10);
Mys('RCPT TO: sender@nxt.ru'+#13+#10);
Mys('DATA'+#13+#10);
Mys('MIME-Version: 1.0'+#13+#10);
Mys('To: sender@nxt.ru'+#13+#10);
Mys('From: user@mail.ru'+#13+#10);
Mys('Subject: hello world'+#13+#10);
Mys('Date: [e.g Tue, 11 Dec 2002 11:10:00 -0400]'+#13+#10);
Mys('Content-Type: application/octet-stream; name="file.txt"'+#13+#10);
Mys('Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 8bit'+#13+#10);
Mys('Content-Disposition: attachment; filename="file.txt"'+#13+#10);
Mys(''+#13+#10);
//--------------------------------
fName := 'text.txt';
AssignFile(f, fName);
Reset(f);
{$I+}
while not EOF(f) do
begin
readln(f, bufer);
Mys(bufer+#13#10);
end;
CloseFile(f);
//----------------------------
Mys('.'+#13+#10);
Mys('QUIT'+#13+#10);
finally
CloseSocket(sock);
end;
end.