使用 Indy 的 TIdSMTP, TIdPOP3收發郵件在驗證賬戶的時候出現錯誤亂碼解決方法

現象:

在使用TIdSMTP, TIdPOP3收發電子郵件時,第一步要驗證,驗證的時候出現錯誤,但錯誤信息是亂碼,都是一些小方框,不知道是什麼出錯信息。


原因:

出錯信息是中文的,採用的中文編碼,但TIdSMTP, TIdPOP3是按英文來解析這些信息的,所以讀出來的是亂碼。


解決方法:

需要修改Indy的源碼,下面三個文件需要修改,找到這三個文件後,將這三個文件跟當前工程源文件放在一起,然後添加到工程中就可以了,避免下次重新安裝Delphi後被修改的文件內容丟失了。

1、IdSMTP.pas 大概355行的位置,將兩個SendCmd函數後面增加參數 IndyTextEncoding_OSDefault

          LEncoder := TIdEncoderMIME.Create(nil);
          try
            SendCmd('AUTH LOGIN', 334);
            if SendCmd(LEncoder.Encode(Username), [235, 334], IndyTextEncoding_OSDefault) = 334 then begin  //添加了參數 IndyTextEncoding_OSDefault 
              SendCmd(LEncoder.Encode(Password), 235, IndyTextEncoding_OSDefault); //添加了參數 IndyTextEncoding_OSDefault
            end;
          finally
            LEncoder.Free;
          end;


2、IdSMTPBase.pas 大概282行位置,將SendCmd函數後面增加參數 IndyTextEncoding_OSDefault

  SendCmd(LCmd, MAILFROM_ACCEPT, IndyTextEncoding_OSDefault); //添加了參數 IndyTextEncoding_OSDefault
  try
    WriteRecipientsNoPipelining(ARecipients);
    SendCmd(DATA_CMD, DATA_ACCEPT);
    SendMsg(AMsg);
    SendCmd('.', DATA_PERIOD_ACCEPT);    {Do not Localize}
  except


3、IdPOP3.pas 大概331,332行的位置,將兩個SendCmd函數後面增加參數 IndyTextEncoding_OSDefault

    patUserPass:
      begin //classic method
        SendCmd('USER ' + Username, ST_OK, IndyTextEncoding_OSDefault); //添加了參數 IndyTextEncoding_OSDefault
        SendCmd('PASS ' + Password, ST_OK, IndyTextEncoding_OSDefault); //添加了參數 IndyTextEncoding_OSDefault
      end;//if APOP
    patSASL:


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章