Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.20;
Скачать: CL | DM;

Вниз

Отправка письма через Winsock, искажается поле Subject   Найти похожие ветки 

 
DVM ©   (2006-11-14 16:26) [0]

Отправляю письмо через Winsock так:


WsaErr := WSAStartUp($101, WSAData);
   if WsaErr <> 0 then exit;
   SmtpHost := GetHostByName(PChar(SmtpServer));
   if SmtpHost = nil then exit;
   SmtpIP := inet_ntoa(PInAddr(SmtpHost.h_addr_list^)^);
   if SmtpIP = nil then exit;
   ZeroMemory(@SAddr, SizeOf(SAddr));
   with SAddr do
     begin
       sin_family := AF_INET;
       sin_port := htons(Port);
       sin_addr.S_addr := Inet_Addr(SmtpIP);
     end;
   Sock := socket(AF_INET, SOCK_STREAM, IPPROTO_IP);  
   if Sock = INVALID_SOCKET then exit;
   if Connect(Sock, SAddr, SizeOf(SAddr)) > 0 then exit;
   
   if RecvCode <> "220" then exit;
   SendData("EHLO " + SmtpServer + CRLF);
   if RecvCode <> "250" then exit;

   SendData("AUTH LOGIN " + EncodeBase64(Login) + CRLF);
   Rcv := RecvCode;
   if  Rcv <> "334" then
     begin
       if Rcv <> "403" then exit;
     end
   else
     begin
       SendData(EncodeBase64(Password) + CRLF);
       if RecvCode <> "235" then exit;
     end;

   senddata("MAIL FROM:" + From + CRLF);
   if RecvCode <> "250" then exit;
   
   senddata("RCPT TO:" + Dest + CRLF);
   if RecvCode <> "250" then exit;

   senddata("DATA" + CRLF);
   if RecvCode <> "354" then exit;

   senddata("Subject: " + Subject + CRLF);
   senddata("From: " + From + CRLF);
   senddata("To: " + Dest + CRLF);
   senddata(Body + CRLF + "." + CRLF);
   if RecvCode <> "250" then exit;
   senddata("QUIT" + CRLF);
   result := true;


Все работает, только почему то поле Subject набранное русскими буквами искажается и принимает вид XXX. Его коддировать как то надо?

Отправляю через яндекс.


 
Dmitrij_K   (2006-11-14 16:47) [1]

Посмотри в indy


 
DVM ©   (2006-11-14 16:53) [2]


> Посмотри в indy

В этом Indy так все накручено, что концы искать можно долго.

Я в принципе подозреваю, что кодировать надо Base64, но почему то если я кодирую, получается также нечитабельный Subject при приеме в почтовике.

Т.е. пробовал так:

senddata("Subject: " + EncodeBase64(Subject) + CRLF);


 
Anatoly Podgoretsky ©   (2006-11-14 16:58) [3]

> DVM  (14.11.2006 16:53:02)  [2]

Вот так делать явно нельзя, достаточно прочитать RFC
Эта структура сложнее.


 
Rouse_ ©   (2006-11-14 17:23) [4]

кодируй примерно вот так: "=?KOI8-R?B?" + EncodeBase64(Subject)


 
DVM ©   (2006-11-14 17:57) [5]


> кодируй примерно вот так:

Кодирую так:

senddata("Subject: =?koi8-r?B?" + EncodeBase64(Subject) + CRLF);

Получаю письмо с темой:

Subject: =?koi8-r?B?7/Do4uXy

B?7/Do4uXy - это закодированное слово "привет". Закодировано правильно.


 
iXT   (2006-11-14 18:02) [6]

Я могу и ошибаться, но сдается мне, что Subject не кодируется Base64


 
DVM ©   (2006-11-14 18:05) [7]


> Я могу и ошибаться, но сдается мне, что Subject не кодируется
> Base64

Ошибаешься

Сделал я. Вот так надо было.

senddata("Subject: =?Windows-1251?B?" + EncodeBase64(Subject) + "?=" + CRLF);


 
iXT   (2006-11-14 18:10) [8]


> Ошибаешься

Ну пусть будет так, я же сказал "могу"


> Сделал я.

С этим и поздравляю


 
Anatoly Podgoretsky ©   (2006-11-14 19:05) [9]

> DVM  (14.11.2006 17:57:05)  [5]

Заголовок не закрыт.


 
Anatoly Podgoretsky ©   (2006-11-14 19:07) [10]

> iXT  (14.11.2006 18:02:06)  [6]

Чего, не только он, но заголовок From: и почти все остальные заголовки.


 
Anatoly Podgoretsky ©   (2006-11-14 19:07) [11]

> DVM  (14.11.2006 18:05:07)  [7]

Вот сейчас заголовок закрыт.


 
iXT   (2006-11-15 11:39) [12]


> Anatoly Podgoretsky ©   (14.11.06 19:07) [10]

Бывает. Заклинило под конец рабочего.



Страницы: 1 вся ветка

Текущий архив: 2007.05.20;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.05 c
3-1173074542
merko$
2007-03-05 09:02
2007.05.20
экспорт из IBQuery в Excel


2-1177656093
Atb
2007-04-27 10:41
2007.05.20
Проблема с типами


15-1177201358
Погуглист
2007-04-22 04:22
2007.05.20
У кого нибудь есть странички на google pages ?


15-1176974376
Petr V.Abramov
2007-04-19 13:19
2007.05.20
Полет армейской мысли


15-1176796832
TUser
2007-04-17 12:00
2007.05.20
Кому тут нуотбук подешевке?