【问题标题】:Sending email using TIdSMTP and TIdMessage使用 TIdSMTP 和 TIdMessage 发送电子邮件
【发布时间】:2016-10-09 20:44:26
【问题描述】:

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

我在DBGrid 中选择带有客户详细信息的row,右键单击,出现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 属性中设置了主机名、端口、用户名和密码,所有详细信息都与雅虎在其网站上提供的一样(主机名、端口、我的登录电子邮件和我的电子邮件密码)

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

一旦我启动我的软件,选择DBGrid 中的行并点击操作按钮上的发送,软件冻结(无响应)大约 20-40 秒,然后返回错误消息:连接正常关闭。

我使用 yahoo smtp 只是为了进行测试,我最终会使用托管我的网站(以及数据库所在的位置)的托管服务提供商提供的 smtp

印地版 10.6.2.5311 使用 Delphi 10 西雅图

到目前为止我做错了什么有什么想法吗?

【问题讨论】:

    标签: delphi smtp indy dbgrid tdbgrid


    【解决方案1】:

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

    我从未使用过 TIdSMTP 组件,但我看到在尝试使用 SSL 连接时,TIdHTTP 组件也会出现类似情况(连接超时,但没有任何明显的原因说明),除非适当的DLL 已可用。它们不是 Indy 不可分割的一部分(我想在某些国家/地区使用加密是一个法律问题),但它们可以在其他地方免费获得。

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

    【讨论】:

    • 不知道,我正在使用该端口,因为这就是雅虎所说的用于该主机名的内容。很可能是这种情况,有没有想过在哪里可以获得这些库以及我需要将它们放在哪里?
    • Indy 自己的网站链接到您可以下载的一组:indyproject.org/sockets/ssl.en.aspx。他们将从具有可执行文件的目录中工作。要么选择一个位置并将其添加到您的默认路径中。
    • 知道要使用这个庞大列表中的哪一个吗?我得到了名单上的最后一个,但没有做到这一点。我的 Indy 版本是 10.6.2.5311 - 我使用的是 Delphi 10 Seattle,尝试使用 1.0.2h 和 1.0.2j。另外,我确实注意到了 UseTLS 选项,它目前默认设置为 utNoTLSSupport。如果我尝试任何其他选项(显式、隐式或要求),它会立即在 IDE 中显示错误:此设置需要 SSL IOHandler。
    • 默认的 IOHandler 不支持 SSL,所以它正在寻找一个组件,例如 TIdSSLIOHandlerSocketOpenSSL。您需要添加一个并设置 TIdSMTP 组件的 IOHandler 属性以使用它。
    • 至于要使用的 OpenSSL 版本:这取决于您的目标平台。 32 位 Windows 目标需要“i386”版本的 DLL,64 位 Windows 目标需要“x64”版本。我会选择该列表中最新的,目前似乎是 v1.0.2j
    猜你喜欢
    • 1970-01-01
    • 2011-11-17
    • 2022-07-27
    • 1970-01-01
    • 2016-04-17
    • 2017-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多