Конференция "Сети" » Посылка почты, проблема с кодировкой.
 
  • Дмитрий Белькевич (12.09.13 23:26) [0]
    Делаю посылку таким кодом:


    function TMakhArchive.SendMail(const Address, Subject, MessageText: string): integer;
    var
    SMTP: TIdSMTP;
    MailMessage: TIdMessage;
    begin
    Result := 0;
    try
     SMTP := TIdSMTP.Create(nil);
     try
      SMTP.Host := DataModule1.MailHost;
      SMTP.Port := DataModule1.MailPort;
      SMTP.Username := DataModule1.MailLogin;
      SMTP.Password := DataModule1.MailPass;
      MailMessage := TIdMessage.Create(nil);
      try
       MailMessage.CharSet := DataModule1.MailCharSet;
       MailMessage.From.Address := DataModule1.MailFrom;
       MailMessage.Recipients.EMailAddresses := Address + IfThen(DataModule1.MailCopy <> '', ';' + DataModule1.MailCopy);
       MailMessage.Subject := Subject;
       MailMessage.Body.Text := MessageText;
       try
        try
         SMTP.Connect;
        except
         Exit(4);
        end;
        if DataModule1.MailNeedAuthentication then
        begin
         SMTP.AuthType := TIdSMTPAuthenticationType(DataModule1.MailAuthType);
         if not SMTP.Authenticate then
          Exit(2);
        end;
        try
         SMTP.Send(MailMessage);
        except
         Exit(5);
        end;
       finally
        if SMTP.Connected then
         SMTP.Disconnect;
       end;
      finally
       FreeAndNil(MailMessage);
      end;
     finally
      FreeAndNil(SMTP);
     end;
    except
     Exit(3);
    end;
    end;



    CharSet = windows-1251. Бывает (пишут - довольно часто), сообщения приходят в KOI 8 вместо 1251, чаще - работает нормально.

    Delphi 2010, последний патч Indy. Господа, есть ли мысли, что не так?
  • DVM © (12.09.13 23:46) [1]
    http://pda.delphimaster.net/?id=1375188734&n=4 не поможет?
    и еще DataModule1.MailCharSet кодировка что меняется что ли? зачем в переменной она? задать ее жестко и лучше utf-8.
  • Дмитрий Белькевич (13.09.13 09:49) [2]
    >и еще DataModule1.MailCharSet кодировка что меняется что ли?

    Да, в инишку вынесена.

    > задать ее жестко и лучше utf-8.

    Спасибо, попробую.
  • Дмитрий Белькевич (13.09.13 15:13) [3]
    Сделал так, кодировка исправилась, будем тестировать дальше, но, похоже, что стало лучше:


    procedure TMakhArchive.InitializeISO(var VHeaderEncoding: char; var vCharSet: string);
    begin
    VCharSet := IdCharsetNames[idcs_UTF_8];
    VHeaderEncoding := 'B';
    end;

    function TMakhArchive.SendMail(const Address, Subject, MessageText: string): integer;
    var
    SMTP: TIdSMTP;
    MailMessage: TIdMessage;
    begin
    Result := 0;
    try
     SMTP := TIdSMTP.Create(nil);
     try
      SMTP.Host := DataModule1.MailHost;
      SMTP.Port := DataModule1.MailPort;
      SMTP.Username := DataModule1.MailLogin;
      SMTP.Password := DataModule1.MailPass;
      MailMessage := TIdMessage.Create(nil);
      try
       MailMessage.OnInitializeISO := InitializeISO;
       MailMessage.CharSet := IdCharsetNames[idcs_UTF_8];
       MailMessage.From.Address := DataModule1.MailFrom;
       MailMessage.Recipients.EMailAddresses := Address + IfThen(DataModule1.MailCopy <> '', ';' + DataModule1.MailCopy);
       MailMessage.Subject := Subject;
       MailMessage.Body.Text := MessageText;
       MailMessage.Date := Now;
       try
        try
         SMTP.Connect;
        except
         Exit(4);
        end;
        if DataModule1.MailNeedAuthentication then
        begin
         SMTP.AuthType := TIdSMTPAuthenticationType(DataModule1.MailAuthType);
         if not SMTP.Authenticate then
          Exit(2);
        end;
        try
         SMTP.Send(MailMessage);
        except
         Exit(5);
        end;
       finally
        if SMTP.Connected then
         SMTP.Disconnect;
       end;
      finally
       FreeAndNil(MailMessage);
      end;
     finally
      FreeAndNil(SMTP);
     end;
    except
     Exit(3);
    end;
    end;

 
Конференция "Сети" » Посылка почты, проблема с кодировкой.
Есть новые Нет новых   [118234   +3][b:0][p:0.002]