Всем доброго времени суток.
Возникла такая проблема. Отправляю письмо (по протоколу SMTP, использую библиотеку Synapse) на свой почтовый ящик. Письмо доходит, всё нормально. Было. Пока не попробовал скомпилировать под WinXP и запустить программу оттуда. Письмо, отправленное из под винды, приходит в каком-то совершенно вырвиглазном виде, когда строка
Время начала: 17:23:22
принимает следующий вид:
Р_СЂР_РјСЏ РЅР_С_Р_Р_Р_: 17:23:22
Сразу оговорюсь, дело не в виртуалке — пробовал загружать винду, установленную на другом разеделе диска — то же самое. При этом из-под Линукса отправляется корректно.
Нет ли у кого идей, как лечить это?
Xubuntu 12.04, Lazarus 0.9.31, FPC 2.6.0;
Windows XP, Lazarus 0.9.30.4, FPC 2.6.0.
Проблема с кодировкой при отправке письма
Модератор: Модераторы
Попробуйте перед текстом ставить теги ?UTF-8?
Добавлено спустя 2 минуты 6 секунд:
и с
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
Добавлено спустя 2 минуты 6 секунд:
и с
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: base64
Код: Выделить всё
var Mess: TMimeMess;
from : string;
begin
POP:=TPOP3Send.Create;
POP.AuthType:=POP3AuthLogin;
POP.Password:=PassEdit.Text;
POP.UserName:=LoginEdit.Text;
POP.TargetHost:=HostEdit.Text;
if POP.Login then begin
Memo2.Lines.Clear;
POP.Retr(SpinEdit1.Value);//получили самое старое письмо
Mess:=TMimeMess.Create;//создали объект
Mess.Lines.Assign(POP.FullResult);//записали всю полученную от сервера информацию
Mess.DecodeMessage;//декодировали сообщение
// from:=GuessEncoding(Mess.MessagePart.PartBody.Text);
Memo2.Lines.Add('*****************************************');
Memo2.Lines.Add(Mess.Header.CustomHeaders.CommaText);
Memo2.Lines.Add('*****************************************');
Memo2.Lines.Add(Mess.Header.XMailer);//вывели информацию из заголовка
Memo2.Lines.Add('*****************************************');
Label8.Caption := Mess.MessagePart.Charset;
Mess.MessagePart.Lines.SaveToFile('serg.txt');
Memo2.Lines.Add(KOI8ToUTF8(Mess.MessagePart.PartBody.Text));//вывели тело сообщения
{ if Length(ComboBox1.Text) = 0 then begin
Memo2.Lines.Add(ConvertEncoding(Mess.MessagePart.PartBody.Text, EncodingAnsi{Mess.MessagePart.Charset},EncodingUTF8));//вывели тело сообщения
end else begin
Memo2.Lines.Add(ConvertEncoding(Mess.MessagePart.PartBody.Text, ComboBox1.Text,EncodingUTF8));//вывели тело сообщения
end;}
Memo2.Lines.Add('*****************************************');
Mess.Free; бред но у меня работает. Точнее сказать что синапсе, что инди сами преобразуют письмо в "нужую" кодировку, но вот лазарю нужен токо UTF8. Пример делал для себя (тестил бяку)
Код: Выделить всё
message_imap.Clear;
message_imap.Header.CharsetCode:=UTF_8;
message_imap.Header.ReplyTo:='';
message_imap.Header.From:='';
message_imap.Header.Subject:='';
message_part:=message_imap.AddPartTextEx(Memo1.Lines,nil,UTF_8,true,ME_8BIT);
message_imap.EncodeMessage;
Внимание , true отключает преобразование кодировок и если текст в utf8 , то все будет работатьReplyTo
