Redmine无法发送邮件,出现execution expired错误求助
我来帮你一步步排查Redmine邮件发送的问题,这种情况我在运维过程中碰到过好几次,咱们从几个核心方向入手:
一、SMTP模式下的核心排查点
当你用SMTP配置出现execution expired错误时,大概率是网络或配置匹配问题:
- 核对SMTP参数与服务商要求一致:不同邮箱服务商的SMTP地址、端口、加密规则差异很大,比如QQ邮箱SMTP地址是
smtp.qq.com,端口465(SSL加密),而Gmail是smtp.gmail.com,端口587(TLS加密)。要确保configuration.yml里的address、port、enable_starttls_auto/ssl这些参数完全符合要求,比如用SSL加密时要设置ssl: true,别混用TLS的配置。 - 确认账号密码/授权码正确性:很多国内邮箱(QQ、网易等)要求用SMTP授权码而非登录密码,你得先去邮箱后台开启SMTP服务,生成专属授权码填到配置里,别直接用登录密码。
- 测试服务器到SMTP的网络连通性:在Redmine服务器上执行命令测试能不能连上SMTP服务器,比如:
如果连不通,说明服务器防火墙拦截了对应端口,或者服务器本身没有外网权限,这时候得先打通网络。telnet smtp.qq.com 465 # 或者用nc命令 nc -zv smtp.gmail.com 587 - 开启详细邮件日志排查:production.log只显示成功但没收到邮件,可能是日志级别不够。在
configuration.yml里添加以下配置:
重新发送测试邮件后,查看email_delivery: delivery_method: :smtp smtp_settings: # 你的原有SMTP配置 logger: :file log_file: log/mail.loglog/mail.log,里面会有更具体的发送细节,比如认证失败、被收件方拒收等。
二、Sendmail模式的排查方向
换成:sendmail后测试显示成功但仍收不到,得从服务器本地邮件服务入手:
- 确认sendmail服务状态:先检查服务器是否安装了sendmail,执行
sendmail -V看版本信息;再用systemctl status sendmail(systemd系统)或service sendmail status(SysV系统)确认服务是否正常运行。 - 直接测试本地sendmail发信:在服务器上执行命令手动发信,看是否能成功:
终端会输出发信的详细过程,如果出现echo "邮件测试内容" | sendmail -v your-test-email@example.comrelay denied之类的错误,说明sendmail本身的中继配置有问题,需要调整sendmail.cf里的规则。 - 检查邮件队列状态:用
mailq命令查看sendmail的邮件队列,如果队列里有积压的邮件,说明邮件没被成功投递,可能是DNS解析失败、目标邮箱域名不存在,或者被对方服务器拒收了。
三、容易忽略的小细节
- 检查收件方垃圾邮件箱:有时候邮件其实已经发送成功,但被收件方的反垃圾系统拦截了,去垃圾邮件文件夹里找找看。
- 确认Redmine配置文件的权限与语法:YAML格式对缩进非常严格,必须用空格不能用制表符;同时要确保Redmine的运行用户(比如
www-data)有读取configuration.yml的权限,否则配置不会生效。
内容的提问来源于stack exchange,提问作者Ronaldo Lanhellas
相关产品推荐
相关产品推荐

