Конференция "Сети" » Вопрос по Indy в проектах .NET [D7, WinXP]
 
  • DarkRaider © (15.05.08 18:48) [0]
    Много вопросов и ответов про 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>Текст письма в формате 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';  // под .net смена этой кодировки ничего не даёт и не меняет
    end;

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

    end.

 
Конференция "Сети" » Вопрос по Indy в проектах .NET [D7, WinXP]
Есть новые Нет новых   [134432   +19][b:0][p:0.002]