Вопрос по Indy в проектах .NET
От: DarkRaider  
Дата: 15.05.08 14:43
Оценка:
Вопрос по Indy в проектах .NET

Много вопросов и ответов про 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;

{destructor Simplesend.destroy;
begin
if assigned(smtp) then
begin
if smtp.Connected then smtp.Disconnect;
smtp.Free
end;
if assigned(mes) then mes.Free;
inherited;
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; //пробовал разные типы, под .net всё равно приходят ??????????
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>Текст письма в формате <b>HTML</b></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'; // под .net смена этой кодировки ничего не даёт и не меняет
end;

procedure Simplesend.Send;
begin
try
try
smtp.Send(mes);
except
showmessage ('error');
end;
finally
smtp.Disconnect;
end;
end;

end.
indy .net
Re: Вопрос по Indy в проектах .NET
От: DarkRaider  
Дата: 30.05.08 09:39
Оценка:
Неужели никто не сталкивался с написанием отсылки почты на .Net? просто даже не верится что я одинок в своих проблемах.
Re[2]: Вопрос по Indy в проектах .NET
От: k0t2dnepr Украина  
Дата: 31.05.08 09:29
Оценка:
Здравствуйте, DarkRaider, Вы писали:

DR>Неужели никто не сталкивался с написанием отсылки почты на .Net? просто даже не верится что я одинок в своих проблемах.

видимо ты единственный, кто не слышал о WideString и по привычке использует AnsiString
Re[3]: Вопрос по Indy в проектах .NET
От: DarkRaider  
Дата: 02.06.08 08:46
Оценка:
Здравствуйте, k0t2dnepr, Вы писали:

K>Здравствуйте, DarkRaider, Вы писали:


DR>>Неужели никто не сталкивался с написанием отсылки почты на .Net? просто даже не верится что я одинок в своих проблемах.

K>видимо ты единственный, кто не слышал о WideString и по привычке использует AnsiString

Хм... сорри но какое ANsiString в .NEt, там же классы ДОтнета используются по умлочанию... или я не прав?
Re[4]: Вопрос по Indy в проектах .NET
От: Аноним  
Дата: 02.06.08 10:09
Оценка:
Здравствуйте, DarkRaider, Вы писали:

DR>Здравствуйте, k0t2dnepr, Вы писали:


K>>Здравствуйте, DarkRaider, Вы писали:


DR>>>Неужели никто не сталкивался с написанием отсылки почты на .Net? просто даже не верится что я одинок в своих проблемах.

K>>видимо ты единственный, кто не слышал о WideString и по привычке использует AnsiString

DR>Хм... сорри но какое ANsiString в .NEt, там же классы ДОтнета используются по умлочанию... или я не прав?

У вас нигде явно не выполняется приведение типов строк к юникоду — какие типы там в .NEt я хз — из вашего собщения нигде не видно что используеться именно "широкие" символы, да и результат вывода говорит сам за себя.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.