Linux服務器用postfix 發送郵件延遲 阻塞 被接收方拒絕等問題
postfix如何設置發送郵件延遲通知
1 */1 * * * /bin/bash /home/delete_postfix.sh
加了個定時器,每小時清理一次發送失敗的郵件隊列了,這樣阻塞最多也就阻塞一個小時了
sendmail如果有信件因故延遲發送,每4個小時就會給發送者發信提示信件延遲發送。
postfix能不能設置呢?
在main.cf中設置:
delay_warning_time = 4
因為考慮到信件流量的問題,postfix缺省不發送通知。
-------------
PostFix郵件發送性能與有效發送問題
用Redis存儲每個域名最后的發送時間,
重復a,b
a) 獲得並鎖住可發送的域名。
b) 針對每一個可發送域名,
1. 如果相應的域名隊列中存在待發送郵件,則發送並更新改域名的最后發送時間。
2. 解鎖該域名發送記錄。
這樣,對郵件隊列采用非阻塞隊列,提高了系統的並發性。
看似解決了問題,但還是被部分服務商列入了黑名單。
於是對系統進行分析,如下:
這是一個典型的生產者與消費者問題,Java客戶端生產的郵件定時推送到Postfix隊列,然后Postfix消費隊列上的郵件,發送到目標郵件服務器。
生產一封,發送一封的話,不會有任何問題,但如果隊列中存在多封,那么向目標郵件服務器投送的速度就無法控制了。
於是檢查postfix隊列:
postqueue -p
發現確實堆積了一些郵件。
原因:系統運行中,某一封郵件發送的延遲會導致后面的郵件發送都被延遲。
處置方法:
在Java端進行發送速度的控制顯然是治標不治本的,於是用Java端同樣的邏輯修改PostFix中郵件發送的代碼,
用同樣的配置文件,最終從根本上解決了控制郵件發送速度的問題。
====================
postfix 刪除隊列中的郵件
列出目前在 Mail Queue 中的郵件
mailq
刪除所有在 Queue 中的郵件
postsuper -d ALL
刪除所有正在 deferred 隊列中的郵件 (刪除曾經發送失敗的郵件 )
postsuper -d ALL deferred
刪除所有正在 deferred 隊列中的郵件 ( 可看出哪些信被刪除了 )
find /var/spool/postfix/deferred -type f -exec rm -vf /{/} /;
刪掉「三天以前」無法發送的郵件
find /var/spool/postfix/deferred -type f -mtime +3 -exec rm -f /{/} /;
列出目前所有無法發送的郵件 find /var/spool/postfix/deferred -type f -exec ls -l –time-style=+%Y-%m-%d_%H:%M:%S {} /;
刪除超過 5 天的 “defer” 佇列中的退信記錄 find /var/spool/postfix/defer -type f -mtime +5 -exec rm -f /{/} /;
預設所有跟Postfix 相關的郵件都會放在/var/spool/postfix/ 目錄下,想了解Postfix是如何管理隊列的,可以參考 qmgr -Postfix queue manager 的手冊.
以下是每個目錄的用途
MAIL QUEUES
* incoming 收信箱
* active 正在准備發送的郵件
* defered 無法發送的郵件,等待重發
* corrupt 無法讀取或者損壞的郵件
* hold 暫停的郵件,需要手工啟動 DELIVERY STATUS REPORTS
* bounce 每一位收件者的送信狀態,記錄為什么退信由 bounce(8) 管理
* defer 每一位收件者的寄送狀態,說明為什么延遲由 defer(8) 管理
* trace 每一位收件者的寄送狀態信息,說明被 Postfix 用 “sendmail -v” 或 “sendmail -bv” 命令執行的狀態由 trace(8) 管理
==================
查看硬盤剩余的容量,發現‘/’目錄下占用了大量的空間;可我在這個目錄下面沒有放什么東西;
仔細查看在/var/spool/postfix/maildrop/ 中發現了大量的文件。
由於linux在執行cron時,會將cron執行腳本中的output和warning信息,都會以郵件的形式發送cron所有者, 而我的服務器中關閉了postfix,導致郵件發送不成功,全部小文件堆積在了maildrop目錄下面。
如果sendmail或者postfix正常運行,則會在/var/mail目錄下也會堆積大量的郵件。
解決方法:
修改“/etc/crontab”
將‘MAILTO=root’替換成‘MAILTO=""’修改之后沒有成功,需要重啟crond服務才可以
也可從在crontab(crontab -e)中最前面直接加入MAILTO=""
===============
(host mx1.qq.com[58.251.110.111] refused to talk to me: 550 Connection frequency limited. http://service.mail.qq.com/cgi-bin/help?subt
QQ郵箱還是拒絕發送了,看來得換個其他郵箱才行了
關鍵是我們都是同樣的QQ郵箱,每個人換不一樣的可能好些
===============
39CEF62151 2695 Thu Aug 1 23:52:07 MAILER-DAEMON
(delivery temporarily suspended: connect to xxx.com[xxx.xx]:25: Connection refused)
為什么Postfix試圖連接到其他機器的SMTP端口25? - 程序園
http://www.voidcn.com/article/p-zwqtagcc-bty.html
什么是MX記錄?如何設置、檢測MX記錄 - 客服中心 - Oray
http://service.oray.com/question/172.html