電子郵件發送速度 - 如何提高

電子郵件發送速度 - 如何提高

我正在維護一個伺服器來發送電子郵件(當然沒有垃圾郵件)。這台機器的目前速度約為。每小時 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

MTA

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

嗨,你不需要後綴!

您需要編寫多執行緒應用程式來從(C++、C# .NetCore 或 Java)發送電子郵件

  • 將新聞通訊電子郵件儲存到 mysql 資料庫

  • 從資料庫中取得每個電子郵件地址的 MX 記錄列表

  • 從此清單中向 smtp 伺服器(主機名稱)發送電子郵件(始終在連接埠 25 上)。

然後,您可以執行應用程式並從 VPS 伺服器的單一或多個 IP 位址發送。

或者您可以嘗試從 postfix 從多個 IP 位址發送電子郵件!

您可以使用C#或Java郵件smtp客戶端

相關內容