使用 Indy 的 TIdSMTP, TIdPOP3收发邮件在验证账户的时候出现错误乱码解决方法

4 篇文章 0 订阅

现象:

在使用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:


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值