电子邮件发送速度 - 如何提高

电子邮件发送速度 - 如何提高

我正在维护一个服务器来发送电子邮件(当然不是垃圾邮件)。这台机器的当前速度约为每小时 2000 封电子邮件。

编辑:实际上,我今天进行了测试邮件发送,取消了限制并向 2500 名最近 + 活跃的订阅者发送了邮件。大约花了 1 小时 45 分钟才把邮件寄出去。)

我的老板指出他对此并不满意,因为他看到 Mail Chimp 等公司可以在几秒钟/几分钟内发送数千封电子邮件。当然,它们确实会发出去,因为您会立即收到回复、打开等。

我的问题是,要达到这样的发送速度,究竟需要什么?我的意思是,当然,您可以添加硬件并构建一个越来越复杂的服务器系统,这些服务器都会发送您的邮件等。当然,这也是一个拥有干净列表的问题(没有未知主机等,因为它们都会占用服务器的资源)

但除此之外,我相信一定还有其他方法可以改善这一点。有人可以对此进行概述吗?

编辑

根据评论中的要求,以下是有关正在使用的硬件以及发送行为的更多细节:

服务器类型

Operating system: CentOS Linux 5.11
Kernel and CPU: Linux 2.6.18-400.1.1.el5 on i686
Processor: Intel Core2 Duo CPU E7500 @ 2.93GHz, 2 cores
CPU load averages: 1.07 (1 min) 1.18 (5 mins) 0.65 (15 mins)
CPU usage: 4% user, 1% kernel, 56% IO, 38% idle
Real memory: 1.49 GB used, 1.94 GB total
Virtual memory: 1.13 GB used, 3.91 GB total
Local disk space: 55.10 GB used, 219.71 GB total

大都会运输署

Postfix version 2.3.3

电子邮件的平均大小

Of the recent mailings, the largest one I found was just below 20k.
On average I can say it's probably between 8k and 10k per message.

可用带宽

30Mbit/s symmetrical

磁盘速度

hdparm -t /dev/sda

    /dev/sda:
     Timing buffered disk reads:  336 MB in  3.01 seconds = 111.64 MB/sec

dd if=/dev/zero of=test bs=64k count=16k conv=fdatasync

    16384+0 records in
    16384+0 records out
    1073741824 bytes (1.1 GB) copied, 23.9512 seconds, 44.8 MB/s

各种指标的测量

CPU load - see above

disk time - ???

RAM usage - see above

bandwidth usage - below data from "iftop -n" over a time period of ca. 5 minutes while sending mail.

    TX:      cum:  3.43MB   peak:  1.16Mb    rates:   5.36Kb  99.5Kb   137Kb
    RX:            1.01MB           120Kb             2.06Kb  38.0Kb  32.3Kb
    TOTAL:         4.44MB          1.28Mb             7.42Kb   137Kb   169Kb

一些邮件日志数据:

in case this is of value, here are a couple of lines from the maillog:

Mar  4 14:00:32 mailserver postfix/smtp[25768]: 6C419107802A: to=<[email protected]>, relay=mx.example.com[123.123.123.123]:25, delay=1.6, delays=0.05/0/0.14/1.4, dsn=2.0.0, status=sent (250 OK id=1YT8ud-0004fe-Rn)
Mar  4 14:00:32 mailserver postfix/qmgr[2806]: 6C419107802A: removed
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup (score_sender), 1 matches for "[email protected]", results: "."=>[Amavis::Lookup::RE=ARRAY(0xaa7f358),HASH(0xac5f891)]
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup_re("[email protected]"), no matches
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) query_keys: [email protected], myself@, mailserver.com, .mailserver.com, .com, .
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup_hash([email protected]), no matches
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) lookup (score_sender<[email protected]>) => undef, "[email protected]" does not match
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) SpamControl: calling spam scanner
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) spam_scan: DSPAM not available, skipping it
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) timer set to 320 s for SA (was 480 s)
Mar  4 14:00:32 mailserver amavis[26392]: (26392-01-46) calling SA parse, SA version 3.2.5
Mar  4 14:00:33 mailserver amavis[26392]: (26392-01-46) CALLING SA check
Mar  4 14:00:33 mailserver postfix/smtp[25767]: A5341207802D: to=<[email protected]>, relay=mx.example.com[123.123.123.123]:25, delay=1.7, delays=0.15/0/0.14/1.4, dsn=2.0.0, status=sent (250 OK id=1YT8ue-0005BY-5x)
Mar  4 14:00:33 mailserver postfix/qmgr[2806]: A5341107802D: removed
Mar  4 14:00:34 mailserver postfix/smtp[25764]: C30371078144: to=<[email protected]>, relay=mx.example.com[123.123.123.123]:25, delay=1.8, delays=0.05/0/0.13/1.6, dsn=2.0.0, status=sent (250 2.0.0 Ok: queued on mx.example.com as 1425474034-NECyl5JAc9-0Xx8wjwN)

答案1

我自己在 Postfix 服务器上运行一个邮件列表,我希望看到 2,000 条消息至少被处理一次(即它们可能会被推迟),然后你才能喝完一杯咖啡。

您的系统似乎正在运行垃圾邮件和病毒扫描传出邮件。虽然扫描收到的邮件是个好主意,但扫描发出的邮件可能不是个好主意,尤其是当邮件的来源已经得到很好的控制时。我们可以看到,这会增加每封邮件的传递时间,并且还会大大增加磁盘 I/O。

我会重新配置 Postfix 以停止扫描外发邮件。如果您需要正常扫描外发邮件(例如,办公室中从计算机发送邮件的人),请设置专用邮件服务器,专门用于处理外发邮件列表流量。

答案2

您的问题是 I/O 速度,从 CPU 等待时间过长可以看出。这可能是由于两个因素造成的:

  1. Postfix 队列管理富含 fsync(),并对 IOPS 造成沉重的负担。
    尝试这个:使用“-o nobarrier”挂载选项重新挂载托管 postfix 队列的文件系统(通常是根文件系统)。警告:这应该仅被视为测试,因为禁用 I/O 屏障可能会导致断电和/或操作系统崩溃时数据丢失。
  2. 看来你也在运行 amavis + 和 spamassassin 来发送邮件。虽然这可能是一件好事(取决于环境及其要求),但 spamassassin 可能会大大降低您的电子邮件吞吐量。
    尝试这个:在 amavisd.conf 中,设置$sa_local_tests_only = 1排除所有依赖网络的测试,并$sa_mail_body_size_limit = 32*1024减少 spamassassin 要扫描的正文部分。

逐一尝试上述建议,每次都对您的系统进行基准测试。然后让我们知道结果。

答案3

您好,您不需要 postfix !!!!

您需要编写多线程应用程序来发送电子邮件(C++、C#、NetCore 或 Java)

  • 将新闻稿电子邮件保存到 mysql 数据库

  • 从数据库获取每个电子邮件地址的 MX 记录列表

  • 从此列表发送电子邮件到 smtp 服务器(主机名)(在端口 25 - 始终)。

然后,您可以运行应用程序并从一台 VPS 服务器的一个或多个 IP 地址发送。

或者您可以尝试从 postfix 的多个 ip 地址发送电子邮件!!!

您可以使用 C# 或 Java 邮件 smtp 客户端

相关内容