Большой Воронежский Форум
» Программирование>Создание почтовика, проблеммы с темой по русски
kent_zae1 15:09 13.06.2009
Качнул исходник и немного его доработал (убрал кусок программы на получение почты, поместил поля для заполнения, изменил кодировку самого письма чтобы при получении отображалось коректно, заменил строку подключения к серверу с авторизацией)
все хорошо, за исключением того что тема письма при последующем получении в Outlook отображается некоректно - вместо слова "Тема" пишется "рЕЛЮ"
это проблемма с кодировкой, кто знает как решить проблемму прошу помочь
в Google не отправлять!-ибо приемлемого решения там не нашел


Прикрепляю исходник
Изображения
[Ответ]
Kerish 16:42 13.06.2009
Если тема письма на русском, то при построении заголовков письма в поле Subject, указывай кодировку и кодируй содержимое этого поля.

Например, кодируй в Windows-1251
Subject: =?Windows-1251?b?0ODh7vLg/vno6SDh6Oft5fEg7/Du5OD+?=!

или кодируй в KOI8-RUS:
Subject: =?koi8-r?B?UmU6IPfB2yDLzMDeIM7FINPSwcLB1NnXwcXUIQ==?=

Спецификации этих кодировок вместе с примерами есть в интернете в большом количестве. [Ответ]
kent_zae1 23:32 13.06.2009
Тема не так проста как кажется на первый взгляд
Subject: =?Windows-1251?b?0ODh7vLg/vno6SDh6Oft5fEg7/Du5OD+?=!
Subject: =?koi8-r?B?UmU6IPfB2yDLzMDeIM7FINPSwcLB1NnXwcXUIQ==?=
эти 2 строки работать никогда не будут

http://www.delphikingdom.ru/asp/answ...IDAnswer=16374
тут вроде бы есть решения, но в 2007 Delphi не работает
специально прикрепил исходник.
Выкладываю и сам код если у кого неначем скомпилировать, может предложите что


unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdMessageClient, IdPOP3, IdMessage, IdSMTP, IdSMTPBase,
IdExplicitTLSClientServerBase, IdCoderHeader, IdText, IdAttachmentFile;

type
TForm1 = class(TForm)
Memo1: TMemo;
POP3: TIdPOP3;
IdMessage: TIdMessage;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Button4: TButton;
SMTP: TIdSMTP;
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Edit7: TEdit;
Label8: TLabel;
Label9: TLabel;
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.dfm}




procedure TForm1.Button4Click(Sender: TObject);
begin
SMTP.Host := Edit4.Text; // адресс почтового сервера
SMTP.Port := StrToInt(Edit1.Text); // порт по которому будет осуществляться подключение
SMTP.Username := Edit2.Text; // логин пользователя
SMTP.Password := Edit3.Text; // пароль пользователя
SMTP.AuthType := atDefault;
with IdMessage do
begin
ContentType := 'text/plain';
CharSet := 'Windows-1251'; //для отправки письма в виндовой кодировке
Body.Assign(Memo1.Lines);
From.Text := Edit5.Text; //отправитель
Recipients.EMailAddresses := Edit6.Text; //получатель
Subject := Edit7.Text; //тема

end;


SMTP.Connect;
try
SMTP.Send(IdMessage);
finally
Label9.Caption:='Отправлено!';
SMTP.Disconnect;
end;
end;
end.
[Ответ]
kent_zae1 09:32 14.06.2009

аутлук нипричем, на почтовом сервере тоже самое - неправильно отображается
У меня уже измененый код под Delpgi2007
http://programmersclub.ru/alar-pochovik/
здесь оригинал и исходник с которого я переделывал - он под Delphi7 попробуй может заработает,
можешь качнуть

обсуждение проблемы с модулями и Indy
http://ww.delphikingdom.com/asp/answ...IDAnswer=55494

http://www.koders.com/delphi/fid1AB2....aspx?s=thread
вот куча модулей под 9 инди
судя по ошибке мне кажется старый инди не полностью снес (могу ошибаться) [Ответ]
Kerish 10:45 14.06.2009

Сообщение от kent_zae1:
Тема не так проста как кажется на первый взгляд
Subject: =?Windows-1251?b?0ODh7vLg/vno6SDh6Oft5fEg7/Du5OD+?=!
Subject: =?koi8-r?B?UmU6IPfB2yDLzMDeIM7FINPSwcLB1NnXwcXUIQ==?=
эти 2 строки работать никогда не будут
http://www.delphikingdom.ru/asp/answ...IDAnswer=16374

Если не использовать левые компоненты, типа Indy, а делать всё вручную руками, то всё работает именно так, как я сказал.

Проверено на личном опыте. [Ответ]
kent_zae1 02:05 15.06.2009
2crabzzy я в шоке, не может быть
отправь мне, посмотрю на оба мыла
inkognito7621(собака)rambler.ru
inkognito7621(собака)yandex.ru
или EXE файл скомпилированый отправь на первый ящик, попробую ее потестить
хотя может из за того что ящик на mail.ru, надо попробовать на рамблере и яндексе

2Kerish у меня такая строка не работает, она подчеркивается красным цветом еще до компеляции
: = - это первое что он подчеркивает, видит это как операцию присваивания в которой допущена ошибка в виде пробела между : и = , ну и практически все остальное тоже в виду того что не может сообразить что это за набор символов.....
может в старых Delphi можно было так написать, (может какие-то модули нужно было подключать) но Delphi 2007 это не понимает.
Subject: =?koi8-r?B?UmU6IPfB2yDLzMDeIM7FINPSwcLB1NnXwcXUIQ==?=
хотя мжет я чего-то непонимаю. [Ответ]
Yandex 11:39 15.06.2009
crabzzy, при использовании WinAPI надо понять какую функцию (юникодную или ansi) Delphi будет вызывать, и возможно надо перекодировать String. Ранее Delphi использовал ANSI-строки, но в виду того, что все переходят на unicode в D2007 может это и поменялось (надо смотреть).
P.S. Delphi старше 7 в глаза не видел. [Ответ]
kent_zae1 11:49 15.06.2009
ну я в шоке
тема отображается правильно,
правда само сообщение отображается неправильно
вечером прийду буду эксперементировать
в твоем тоже самое, но те которые переадресованы там нормально

по поводу WinAPI и Subject :="?koi8-r?B?UmU6IPfB2yDLzMDeIM7FINPSwcLB1NnXwcXUIQ==?="
незнаю может и можно, я не так давно начал дэлфи увлекаться, поэтому просьба сильно не бить ))
прикрепляю скирины

Сообщение от Yandex:
P.S. Delphi старше 7 в глаза не видел.

сам бы рад не видеть, что самое отстойное нет нормальной справочной системы
больше всего раздражает не полная совместимость с предыдущими версиями, приходиться часто переделывать исходники
когда покупал диск - искал дэлфи7, а взял то что было, вот и мучаюсь теперь

Изображения
Нажмите на изображение для увеличения
Название: принт скрин.JPG
Просмотров: 39
Размер:	77.2 Кб
ID:	475496   Нажмите на изображение для увеличения
Название: принт скрин 2.JPG
Просмотров: 30
Размер:	84.7 Кб
ID:	475510  

[Ответ]
Kerish 12:18 15.06.2009
Дело в том, что почтовому клиенту и не только, чтобы он словился, надо указывать в какой кодировке находится твое сообщение.

Например в одном из заголовков надо указать, допустим:

Content-Type: text/plain; charset=koi8-r

Просто я незнаю как это делать с каким-то компонентом, я всё это делал вручную, все данные передавал через стандартную виндовую библиотеку WinSock. [Ответ]
kent_zae1 22:13 15.06.2009
думаю завтра или послезавтра съезжу и возьму Delphi7, возможно мучения кончатся, хотябы частично, там справка хотя бы нормальная
2Kerish у меня как раз тоже так получалось перекодировать как раз текст сообщения.
Чтобы текст сообщения был русским я прописывал:

SMTP.Host := Edit4.Text; // адресс почтового сервера
SMTP.Port := StrToInt(Edit1.Text); // порт по которому будет осуществляться подключение
SMTP.Username := Edit2.Text; // логин пользователя
SMTP.Password := Edit3.Text; // пароль пользователя
SMTP.AuthType := atDefault;
with IdMessage do
begin
ContentType := 'text/plain';
CharSet := 'Windows-1251'; //для отправки письма в виндовой кодировке

Body.Assign(Memo1.Lines);
From.Text := Edit5.Text; //отправитель
Recipients.EMailAddresses := Edit6.Text; //получатель
Subject := Edit7.Text; //тема

а после этого идет как раз строка Body.Assign(Memo1.Lines); текст отпраки находиться в Memo1 - перекодируется все без проблем, но с темой почему-то у меня не прокатило, сейчас эксперементы прекратил пока, 7 дэлфи поставлю на днях и тогда попробую доделать
[Ответ]
Вверх