Delphi:连接IMAP到gmail帐户

Delphi:连接IMAP到gmail帐户,delphi,ssl,gmail,imap,gmail-imap,Delphi,Ssl,Gmail,Imap,Gmail Imap,我尝试将我连接到一个测试gmail帐户。 我激活了IMAP,停止了本地防火墙和防病毒程序 我使用的是2个Indy组件: imap:TIdIMAP4 ssl:TIdSSLIOHandlerSocketOpenSSL 我也是 imap.Connect() 它连接,但不久后断开 这里是包含用户和psw到gmail测试帐户的项目(DelphiXE3) 我在TIdSSLIOHandlerSocketOpenSSL组件和TIdIMAP4中尝试了不同的选项,但没有成功 证书包括: host=imap.gma

我尝试将我连接到一个测试gmail帐户。 我激活了IMAP,停止了本地防火墙和防病毒程序

我使用的是2个Indy组件:

imap:TIdIMAP4 ssl:TIdSSLIOHandlerSocketOpenSSL

我也是

imap.Connect()

它连接,但不久后断开

这里是包含用户和psw到gmail测试帐户的项目(DelphiXE3)

我在TIdSSLIOHandlerSocketOpenSSL组件和TIdIMAP4中尝试了不同的选项,但没有成功

证书包括:

host=imap.gmail.com
user=testeustachioi@gmail.com
印地的两个组成部分是:

object ssl: TIdSSLIOHandlerSocketOpenSSL
    OnStatus = sslStatus
    Destination = 'imap.gmail.com:993'
    Host = 'imap.gmail.com'
    MaxLineAction = maException
    Port = 993
    DefaultPort = 0
    SSLOptions.Method = sslvSSLv23
    SSLOptions.SSLVersions = [sslvSSLv3, sslvTLSv1]
    SSLOptions.Mode = sslmUnassigned
    SSLOptions.VerifyMode = []
    SSLOptions.VerifyDepth = 0

object imap: TIdIMAP4
    OnStatus = imapStatus
    IOHandler = ssl
    OnDisconnected = imapDisconnected
    OnConnected = imapConnected
    Password = 'fudbafqpmjgikxct'
    Port = 993
    Username = 'testeustachioi@gmail.com'
    Host = 'imap.gmail.com'
    UseTLS = utUseImplicitTLS
    SASLMechanisms = <>
    MilliSecsToWaitToClearBuffer = 10
以下是完整的单元代码:

unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdComponent, IdIOHandler,

  IdException,

  IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdIMAP4, IdMessage,
  IdBaseComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase,
  IdMessageClient, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    mess: TIdMessage;
    imap: TIdIMAP4;
    ssl: TIdSSLIOHandlerSocketOpenSSL;
    mLog: TMemo;
    Button1: TButton;
    lbFolder: TListBox;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure imapConnected(Sender: TObject);
    procedure imapDisconnected(Sender: TObject);
    procedure imapStatus(ASender: TObject; const AStatus: TIdStatus;
      const AStatusText: string);
    procedure sslStatus(ASender: TObject; const AStatus: TIdStatus;
      const AStatusText: string);
    procedure sslStatusInfo(const AMsg: string);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
    sender_mail, sender_name, uid : string;
begin
imap.Connect();
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
imap.ListMailBoxes(lbFolder.Items);
end;

procedure TForm1.imapConnected(Sender: TObject);
begin
mLog.Lines.Add('IMAP Connected SUCCESS');
end;

procedure TForm1.imapDisconnected(Sender: TObject);
begin
mLog.Lines.Add('IMAP DISCONNECTED');
end;

procedure TForm1.imapStatus(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: string);
begin
mLog.Lines.Add('Status = ' + AStatusText);
end;

procedure TForm1.sslStatus(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: string);
begin
mLog.Lines.Add('SSL Status = ' + AStatusText);
end;

procedure TForm1.sslStatusInfo(const AMsg: string);
begin
mLog.Lines.Add('SSL Info = ' + AMsg);
end;

end.

我用了很多时间连接imap,尝试了其他组件, 最后,。。通过再次检查,连接凭据错误(一个字符错误)。现在它工作了。 很抱歉打扰您
Peter

您的问题需要在此处包含代码,而不是在非现场位置(当然也不是在非现场的文件中,我们在使用之前必须先下载该文件)。很抱歉,插入zip文件的上载不起作用。没错。我没有说“包括你的zip文件的上传”。我说“包括代码”。而且不仅仅是
imap.Connect()
;您在
TIdIMAP4
tidslliohandlersocketopenssl
组件上设置了所有配置属性。仅使用DFM代码上的所有详细信息完成请求是不够的。包括一些实际的源代码,看看发生了什么。请尝试创建一个我们无需从某个随机站点下载软件包即可使用的。不要使用真正的gmail帐户(即使只是为了测试)——我们可以编辑源代码并添加自己的凭据。
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, IdComponent, IdIOHandler,

  IdException,

  IdIOHandlerSocket, IdIOHandlerStack, IdSSL, IdSSLOpenSSL, IdIMAP4, IdMessage,
  IdBaseComponent, IdTCPConnection, IdTCPClient, IdExplicitTLSClientServerBase,
  IdMessageClient, Vcl.StdCtrls;

type
  TForm1 = class(TForm)
    mess: TIdMessage;
    imap: TIdIMAP4;
    ssl: TIdSSLIOHandlerSocketOpenSSL;
    mLog: TMemo;
    Button1: TButton;
    lbFolder: TListBox;
    Button2: TButton;
    procedure Button1Click(Sender: TObject);
    procedure imapConnected(Sender: TObject);
    procedure imapDisconnected(Sender: TObject);
    procedure imapStatus(ASender: TObject; const AStatus: TIdStatus;
      const AStatusText: string);
    procedure sslStatus(ASender: TObject; const AStatus: TIdStatus;
      const AStatusText: string);
    procedure sslStatusInfo(const AMsg: string);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var i: Integer;
    sender_mail, sender_name, uid : string;
begin
imap.Connect();
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
imap.ListMailBoxes(lbFolder.Items);
end;

procedure TForm1.imapConnected(Sender: TObject);
begin
mLog.Lines.Add('IMAP Connected SUCCESS');
end;

procedure TForm1.imapDisconnected(Sender: TObject);
begin
mLog.Lines.Add('IMAP DISCONNECTED');
end;

procedure TForm1.imapStatus(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: string);
begin
mLog.Lines.Add('Status = ' + AStatusText);
end;

procedure TForm1.sslStatus(ASender: TObject; const AStatus: TIdStatus;
  const AStatusText: string);
begin
mLog.Lines.Add('SSL Status = ' + AStatusText);
end;

procedure TForm1.sslStatusInfo(const AMsg: string);
begin
mLog.Lines.Add('SSL Info = ' + AMsg);
end;

end.