【发布时间】:2018-03-16 10:04:19
【问题描述】:
我的目标是加快发送电子邮件的过程,因为当收件人列表很大时,仅使用 1 个电子邮件帐户发送会延迟很长时间。
然后我有一个包含多个电子邮件帐户的 txt 文件,每行等于这个:
- smtp.company.fr|marketing@company.fr|emailpass|587
然后我想创建一个线程数量等于这个txt文件的行数(如果大于它,会导致错误:-))在“|”之间传递每个信息分隔符作为每个线程的参数。
所有电子邮件收件人都将出现在唯一的Memo(逐行)中,并且我的应用不必在发送后将相同的消息发送给同一收件人。
我有一个关于如何创建多个线程的示例,但我不知道如何将这些参数传递给创建的每个线程:
type
TMyThread = class(TThread)
private
protected
procedure Execute; override;
public
constructor Create;
end;
constructor TMyThread.Create;
begin
inherited True;
FreeOnTerminate := True;
Priority := tpNormal;
end;
//=================================================================
var
I: Integer;
MyThreadList: array [0..2] of TMyThread; // creates two threads
begin
for I := 0 to High(MyThreadList) do
begin
MyThreadList[I] := TMyThread.Create(True);
MyThreadList[I].FreeOnTerminate := True;
MyThreadList[I].Priority := tpNormal;
MyThreadList[I].Resume;
end;
end;
如果存在一些更好的想法来加快仅使用 1 个电子邮件帐户发送电子邮件的过程,将受到欢迎。
【问题讨论】:
-
准备好将您的邮件服务器列入黑名单。这是一个肯定的方法。您应该认真考虑使用 MailChimp / Mandrill 等电子邮件服务来防止此类问题。
-
@Victoria,谢谢你的建议,但我正在搜索性能。换句话说,以良好的速度发送尽可能多的电子邮件(例如:每秒发送 10 封电子邮件)。
-
线程并不是神奇的性能解决方案。您还有其他瓶颈,例如您的 CPU、网络/互联网速度、磁盘速度(如果您正在将文件加载到电子邮件)等。同时发送 10 封电子邮件无论是在一个线程中还是在 10 个线程中都没有太大区别线程。再一次,发送任何数量的批量电子邮件都在乞求被列入黑名单,尤其是以 10/秒的速度。如果您不想使用其他服务,那么我建议您是否有任何事情让它们更慢,而不是更快。
-
为什么 CPU 的数量是相关的。这不是 CPU 绑定任务。
-
@MarcioGomes: "ex: 10 email sent/second" - 你确实意识到你可以一次向多个收件人发送一封电子邮件,不要你?额外的收件人不会花费更多时间,因为您只向 SMTP 服务器发送电子邮件的 1 份副本,然后它会为您将电子邮件复制给每个收件人。
标签: multithreading delphi mail-sender