使用PHP SwiftMailer和SMTP发送简报

Oki*_*izb 5 php email postfix-mta newsletter swiftmailer

我每天都会向大约20K的收件人发送简报.移动到其他服务器后,我需要大约六倍的时间使用相同的PHP脚本 - 我尝试了许多不同的设置,但没有运气(请看这篇文章).电子邮件服务器似乎已正确配置(关于垃圾邮件,中继和病毒),服务器运行Plesk 11.5.30.

做了很多实验,改变了PHP脚本和Postfix设置,我能够通过以下方式获得最佳性能:

  1. 使用SwiftMailer从PHP发送电子邮件.
  2. 使用SMTP(本地帐户)作为传输.
  3. 将收件人列表分为四个部分,并为每个部分启动单独的PHP-CLI过程.

当我只启动一个进程时,PHP发送大约5封电子邮件/秒(当我使用mail()函数发送电子邮件时大致相同).Postfix在"动态"发送它们没有问题,所以没有队列.

当我开始四个进程时,PHP发送大约10封电子邮件/秒,但是后缀不再能够"动态"发送它们(它只能发送大约5封电子邮件/秒),因此队列变得越来越大.当PHP进程结束时,我的队列中有大约4500封电子邮件.这里有一个有趣的部分:当没有更多活跃的PHP进程发送电子邮件时,Postfix"加速"发送大约20封电子邮件/秒.当PHP发送新电子邮件时,Postfix是否能够以此速率发送电子邮件?没有队列,它会解决我的问题.

我很感激我能做些什么来改善我的脚本和服务器发送新闻通讯的性能.

这是Postfix配置:

root@hostname:~# postconf -n 
alias_database = hash:/etc/aliases 
alias_maps = hash:/etc/aliases, hash:/var/spool/postfix/plesk/aliases 
append_dot_mydomain = no 
biff = no 
config_directory = /etc/postfix 
disable_vrfy_command = yes 
inet_interfaces = all 
inet_protocols = ipv4 
mailbox_size_limit = 0 
mailman_destination_recipient_limit = 1 
message_size_limit = 51200000 
mydestination = (none), localhost, localhost.localdomain, localhost 
mydomain = domain.com 
myhostname = myhostname.com 
mynetworks = 127.0.0.0/8 [::1]/128 my.ip.add.ress 
plesk_virtual_destination_recipient_limit = 1 
readme_directory = no 
recipient_delimiter = + 
relayhost = 
sender_dependent_default_transport_maps = hash:/var/spool/postfix/plesk/sdd_transport_maps 
smtp_connect_timeout = 10s 
smtp_helo_timeout = 100s 
smtp_send_xforward_command = yes 
smtp_tls_security_level = may 
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache 
smtp_use_tls = no 
smtpd_authorized_xforward_hosts = 127.0.0.0/8 [::1]/128 
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU) 
smtpd_client_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_rbl_client zen.spamhaus.org 
smtpd_proxy_timeout = 3600s 
smtpd_recipient_restrictions = permit_mynetworks, check_client_access pcre:/var/spool/postfix/plesk/no_relay.re, permit_sasl_authenticated, reject_unauth_destination 
smtpd_sasl_auth_enable = yes 
smtpd_sender_restrictions = check_sender_access hash:/var/spool/postfix/plesk/blacklists, permit_sasl_authenticated, check_client_access pcre:/var/spool/postfix/plesk/non_auth.re 
smtpd_timeout = 3600s 
smtpd_tls_cert_file = /etc/postfix/postfix_default.pem 
smtpd_tls_key_file = $smtpd_tls_cert_file 
smtpd_tls_security_level = may 
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache 
smtpd_use_tls = yes 
transport_maps = , hash:/var/spool/postfix/plesk/transport 
virtual_alias_maps = $virtual_maps, hash:/var/spool/postfix/plesk/virtual 
virtual_gid_maps = static:31 
virtual_mailbox_base = /var/qmail/mailnames 
virtual_mailbox_domains = $virtual_mailbox_maps, hash:/var/spool/postfix/plesk/virtual_domains 
virtual_mailbox_limit = 0 
virtual_mailbox_maps = , hash:/var/spool/postfix/plesk/vmailbox 
virtual_transport = plesk_virtual 
virtual_uid_maps = static:110
Run Code Online (Sandbox Code Playgroud)

Oki*_*izb 0

感谢您的所有回答和努力。幸运的是,我能够找到问题的主要原因 - 它将队列保存在硬盘上。我们将其更改为 RAM,现在每秒可以发送大约 30 封电子邮件。