Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Не посылается письмо размером больше 6 кб


Страницы:   1 2

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.


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо