zoukankan      html  css  js  c++  java
  • Linux服务器用postfix 发送邮件延迟 阻塞 被接收方拒绝等问题

    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

  • 相关阅读:
    Android状态栏和导航栏
    ScrollView小记
    iOS本地推送
    java-集合框架-泛型1
    java-集合框架4---foreach使用--for的增强使用
    java-集合框架3-迭代器的使用
    JAVA-集合框架2
    Number 数据类型转化 NaN 函数isNaN
    数据类型分类
    VScode 插件推荐安装
  • 原文地址:https://www.cnblogs.com/zdz8207/p/Linux-postfix-sendmail2.html
Copyright © 2011-2022 走看看