【发布时间】:2014-07-08 08:41:04
【问题描述】:
当我尝试使用 indy 发送带有附件的电子邮件时,我的程序冻结了,我不知道为什么。 这是我用于发送电子邮件的表单的完整代码。
unit Dok_sutisana;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, IdMessage, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdExplicitTLSClientServerBase, IdMessageClient, IdSMTPBase,
IdSMTP, StdCtrls, Buttons, ComCtrls, IdAttachmentFile;
type
TForm14 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
BitBtn1: TBitBtn;
FontDialog1: TFontDialog;
RichEdit1: TRichEdit;
IdSMTP1: TIdSMTP;
IdMessage1: TIdMessage;
BitBtn2: TBitBtn;
procedure BitBtn2Click(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form14: TForm14;
implementation
uses Autentif, EDGA;
{$R *.dfm}
procedure TForm14.BitBtn1Click(Sender: TObject);
begin
if FontDialog1.Execute() then
RichEdit1.Font:=FontDialog1.Font;
end;
procedure TForm14.BitBtn2Click(Sender: TObject);
var s:string;
begin
form3.ADOTable1.Active:=true;
//setup SMTP
IdSMTP1.Host := form3.adotable1['smtp'];
IdSMTP1.Port := form3.adotable1['ports'];
IdSMTP1.Username:= '******@gmail.com';
IdSMTP1.Password:='******';
//setup mail message
IdMessage1.From.Address := form3.adotable1['e-pasts'];
IdMessage1.From.Name:= form3.adotable1['Vards']+' '+ form3.adotable1['Uzvards'];
IdMessage1.Recipients.EMailAddresses := edit1.Text;;
IdMessage1.Subject := edit2.Text;
IdMessage1.Body.Add(RichEdit1.Text + form3.ADOTable1['paraksts']);
s:= GetCurrentDir + form1.ADOTable1['Dok_adr'];
TIdAttachmentFile.Create(IdMessage1.MessageParts, s ) ;
//send mail
IdSMTP1.Connect() ;
IdSMTP1.Send(IdMessage1) ;
IdSMTP1.Disconnect;
IdMessage1.Free;
IdSMTP1.Free;
form3.ADOTable1.Active:=false;
Form14.Close;
end;
end.
我希望这能帮助我解决我的问题。
【问题讨论】:
-
您是否尝试过使用调试器单步执行您的代码?可能有助于准确了解锁定的步骤。您还需要尝试...最后围绕连接/断开连接和内存创建/释放。可能是您第一次连接但不断开连接,然后您将不得不等待连接超时。
-
@DavidG 锁定发生在 IdSMTP 中的 TIdSMTP.Connect 函数中
-
当我使用这个库时,我有额外的行:“IdSMTP1.NeedAuthentication := false;”和“IdSMTP1.UseTLS := emNOTLSSupport”。我怀疑你可以在连接之前尝试第一行,看看会发生什么。
-
在“IdSMTP1.Connect”行之前添加“IdSMTP1.NeedAuthentication := false;”。请注意,您的代码无法使用“Connect()”编译,因为这不是有效的 delphi pascal。您需要提供实际代码。可能是问题被搁置的原因。
-
@DavidG 我到底需要在哪里添加它们? (我对这一切知之甚少)
标签: delphi delphi-2010 email-attachments indy