Много вопросов и ответов про IdSMTP и Email, но про проблемы с ними в .NET, к сожалению не нашёл. Если повторюсь - извините, но очень надеюсь на Вашу помошь.
Итак диспозиция: есть 1 и тот же модуль, совершенно элементарный в Нём класс и 3 метода, которые динамически создают IdSmtp, IdMessage, заполняют нужные поля, и отсылают письмо. Модуль сделан только ради единообразия, всё это делал и вручную через визуальные компоненты.
Суть проблемы: Если компилирую проект под Win32 (BDS2006/CodeGear Rad) - всё замечательно работает, отсылает. Письмо получаю почтовой програмой(Bat) или через Веб интерфейс - всё в порядке (аттачмент тоже нормально передаётся). Если компилирую ТОТ ЖЕ САМЫЙ модуль (либо компоненты) под .Net - сразу получаю в письме все русские буквы равными ???????. Создаётся ощущение что .nET реализация не хочет перекодировать сообщения чисто из принципа. К слову сказать Аттачмент приходящий с письмом (тестовый файл), содержащий русские буквы, декодируется и сохраняется нормально в обоих случаях.
код модуля (немного сокращённый):
interface
uses
...
type
Simplesend = class
smtp:TIdSmtp;
mes:TIdMessage;
constructor Create;
function Connect:boolean;
procedure Send;
procedure Prepare;
procedure mInitializeISO(var VTransferHeader: TTransfer; var VHeaderEncoding: Char; var VCharSet: string);
end;
implementation
function Simplesend.Connect: boolean;
begin
try
smtp.Connect;
smtp.Authenticate;
result:=true;
except
result:=false;
end;
end;
constructor Simplesend.Create;
begin
inherited;
smtp:=TIdSmtp.Create;
mes:=TIdMessage.Create;
end;
procedure Simplesend.Prepare;
var a:string;
begin
smtp.Host:='1.1.1.1';
smtp.Username:='---';
smtp.Password:='---';
smtp.MailAgent:='---';
mes.From.Name:='---';
mes.From.Address:='---';
mes.Sender.Address:='---';
mes.ReplyTo.Add.Address:='---';
mes.Recipients.Add.Address:='---';
mes.UseNowForDate:=true;
mes.Encoding:=meMIME;
mes.OnInitializeISO:=mInitializeISO;
a:='test subj. Очень тестовый сабж';
mes.Subject:=a;
With TIdText.Create(mes.MessageParts) do
begin
Body.Text := 'Простой текст письма';
ContentType := 'text/plain; charset=windows-1251';
end;
With TIdText.Create(mes.MessageParts) do
begin
Body.Text := '<p>Текст письма в формате HTML</p>';
ContentType := 'text/html; charset=windows-1251';
end;
TIdAttachmentFile.Create(mes.MessageParts, 'C:\1.1');
end;
procedure Simplesend.mInitializeISO(var VTransferHeader: TTransfer;
var VHeaderEncoding: Char; var VCharSet: string);
begin
VTransferHeader := bit7;
VHeaderEncoding := 'B';
VCharSet := 'windows-1251';
end;
procedure Simplesend.Send;
begin
try
try
smtp.Send(mes);
except
showmessage ('error');
end;
finally
smtp.Disconnect;
end;
end;
end.