【问题标题】:Delphi: connection IMAP to gmail accountDelphi:将 IMAP 连接到 gmail 帐户
【发布时间】:2015-02-09 13:45:04
【问题描述】:

我尝试将我连接到一个测试 gmail 帐户。 我已经激活了 IMAP,关闭了本地防火墙和防病毒软件。

我正在使用 2 个 Indy 组件:

imap: TIdIMAP4; ssl:TIdSSLIOHandlerSocketOpenSSL;

我愿意

imap.Connect();

它连接但不久后断开。

这里是项目 (Delphi XE3),其中包含用户和 psw 到 gmail 测试帐户。

http://sqlmis.com/update/testimap.zip

我在 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

非常感谢您的任何帮助或建议

彼得

P.S.:这里是 imap 和 ssl 组件的日志

SSL Status = Resolving hostname imap.gmail.com.
SSL Status = Connecting to 64.233.167.108.
SSL Info = SSL status: "before/connect initialization"
SSL Info = SSL status: "before/connect initialization"
SSL Info = SSL status: "SSLv2/v3 write client hello A"
SSL Info = SSL status: "SSLv3 read server hello A"
SSL Info = SSL status: "SSLv3 read server certificate A"
SSL Info = SSL status: "SSLv3 read server key exchange A"
SSL Info = SSL status: "SSLv3 read server done A"
SSL Info = SSL status: "SSLv3 write client key exchange A"
SSL Info = SSL status: "SSLv3 write change cipher spec A"
SSL Info = SSL status: "SSLv3 write finished A"
SSL Info = SSL status: "SSLv3 flush data"
SSL Info = SSL status: "SSLv3 read server session ticket A"
SSL Info = SSL status: "SSLv3 read finished A"
SSL Info = SSL status: "SSL negotiation finished successfully"
SSL Info = SSL status: "SSL negotiation finished successfully"
SSL Info = Cipher: name = ECDHE-RSA-RC4-SHA; description = ECDHE-RSA-RC4-SHA       SSLv3 Kx=ECDH     Au=RSA  Enc=RC4(128)  Mac=SHA1
; bits = 128; version = TLSv1/SSLv3; 
Status = Connected.
IMAP Connected SUCCESS
Status = Disconnecting.
IMAP DISCONNECTED
Status = Disconnected.

这里是完整的单元代码:

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.

【问题讨论】:

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

标签: delphi ssl gmail imap gmail-imap


【解决方案1】:

我在这个 imap 连接上花了很多时间,尝试了其他组件, 最后,...通过再次检查,连接凭据错误(一个字符错误)。现在它工作了。 许多人对打扰感到抱歉 彼得

【讨论】:

    猜你喜欢
    • 2016-09-01
    • 1970-01-01
    • 2013-09-11
    • 2020-04-25
    • 2015-11-20
    • 1970-01-01
    • 1970-01-01
    • 2012-04-05
    • 1970-01-01
    相关资源
    最近更新 更多