gpt4 book ai didi

delphi - 需要 Delphi 6 示例在 TIdSmtp 发送操作期间更新进度条,特别是对于大型附件

转载 作者:行者123 更新时间:2023-12-03 19:33:38 26 4
gpt4 key购买 nike

我正在使用 Indy TIdSmtp 组件发送电子邮件。我发送的电子邮件会有一个很大的附件,通常在 5 到 40 MB 的范围内。我想更新一个进度条,它将显示发送的整体进度占需要发送的字节总数的百分比。我不在乎它是否真的很精确,只要足以让观看进度条的人指示整个电子邮件发送过程的进度。

有人可以指出我如何执行此操作的代码示例吗?

最佳答案

TIdSMTP在将电子邮件发送到服务器时对其进行即时编码。正在发送的字节总数是未知的。您能够确定一个相当接近的值的唯一方法是将电子邮件编码为临时 TStream通过 TIdMessage.SaveToStream()方法,然后获取 TStream.Size 的值属性(property)。由于您正在编码大型附件,这将需要一些时间和大量的内存开销。由于TIdSMTP只会在传输过程中再次重新编码电子邮件,无法保证实际传输的字节数与临时 TStream.Size 匹配由于各种电子邮件 header 的动态特性,例如时间戳和 MIME 边界。

要确定实际发送了多少字节,请使用 TIdSMTP.OnWork...事件,其中 AWorkMode参数将设置为 wmWrite .由于TIdSMTP.Send()事先不知道它将发送多少字节,AWorkCountMax TIdSMTP.OnWorkBegin 的参数事件将是 0 ,但至少您会知道实际的电子邮件数据何时开始编码/发送(在 TIdSMTP 与服务器交换了多个命令之后)。 AWorkCount TIdSMTP.OnWork 的参数event 将是实际发送的字节总数。当TIdSMTP.OnWorkEnd事件被触发,电子邮件已完成发送。

基于温度 TStream.Size属性(property)和AWorkCount TIdSMTP.OnWork 的参数事件,您将能够显示进度条的近似百分比。不能保证 100% 准确,但会很接近。

关于delphi - 需要 Delphi 6 示例在 TIdSmtp 发送操作期间更新进度条,特别是对于大型附件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10611038/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com