使用TIdSMTP和TIdMessage

时间:2016-10-09 20:44:27

标签: delphi smtp indy dbgrid tdbgrid

我正在使用ActionManager中的某个操作向我DBGrid的客户发送电子邮件。

我在row中选择了包含客户详细信息的DBGrid,右键单击,Popupactionbar出现,我点击发送邮件操作,邮件应该发送。

这是邮件发送操作的代码:

procedure TForm2.actSendEmailExecute(Sender: TObject);
begin
IdSMTP1.Host := 'smtp.mail.yahoo.com';
IdSMTP1.Port := 465;

//setup mail message
IdMessage1.From.Address := 'my email address is here';
IdMessage1.Recipients.EMailAddresses := DBGrid1.DataSource.DataSet['email'];
IdMessage1.Subject   := 'test subject';
IdMessage1.Body.Text := 'test email body' + DBGrid1.DataSource.DataSet['details'];

//send mail try
IdSMTP1.Connect ;
IdSMTP1.Send(IdMessage1) ;
IdSMTP1.Disconnect;
end;

我正在使用TIdSMTPTIdMessage(Indy组件)。 我还使用Object Inspector在TIdSMTP属性中设置了主机名,端口,用户名和密码,所有详细信息都是雅虎在他们的网站上提供的(主机名,端口,用于登录的电子邮件和我的电子邮件密码)< / p>

在我在DBGrid中选择的行中,有一个名为email的字段,其中包含客户端的邮件地址,因此这是电子邮件应该去的地方。 另外,我在一个名为details的字段中添加了一些信息,这些信息应该放在电子邮件的正文部分(参见上面的代码)

一旦我启动我的软件,选择DBGrid中的行并点击动作按钮上的发送,软件冻结(没有响应)大约20-40秒,而不是它返回错误说:连接已关闭正常。

我正在使用yahoo smtp来测试一下,我最终会使用托管我的网站的托管服务提供商的smtp(以及db所在的位置)

Indy版本10.6.2.5311 使用Delphi 10 Seattle

到目前为止我对错误的看法有什么看法?

1 个答案:

答案 0 :(得分:1)

这可能与缺少的SSL库有关吗?我只是注意到你使用的是端口465;不是SSL连接?

我从未使用TIdSMTP组件,但我发现在尝试使用SSL连接时,TIdHTTP组件出现类似情况(连接超时,没有任何明显的指示,为什么),除非适当DLL已经可用。它们不是Indy不可分割的一部分(我想这是一些关于在某些国家使用加密的法律问题),但它们可以在其他地方免费获得。

编辑:该组件还有一个“UseTLS”属性,可能尚未设置。