CentOS 通过465端口发送QQ邮件

本文详细介绍如何在Linux环境下配置QQ邮箱SMTP服务,包括开启SMTP、获取授权码、配置Postfix、创建认证、配置邮件发送者及测试邮件发送流程。

1.QQ邮箱开启SMTP并获取授权码

进入QQ邮箱,选择设置-账户,开启如图两个SMTP,并获取授权码QQ

2.关闭sendmail服务

[root@ruozedata001 ~]# service sendmail stop 
[root@ruozedata001 ~]# chkconfig sendmail off

3.修改/etc/postfix/main.cf

[root@ruozedata001 ~]# vim /etc/postfix/main.cf 
# 默认为 inet_interfaces = localhost,修改成all
inet_interfaces = all

4.启动postfix服务

[root@ruozedata001 ~]# service postfix start 
[root@ruozedata001 ~]# chkconfig postfix on 
[root@ruozedata001 ~]# postfix check 
[root@ruozedata001 ~]# systemctl status postfix
# 启动成功输出
● postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
   Active: active (running) since Sat 2019-08-24 15:59:32 CST; 3h 4min ago
 Main PID: 1965 (master)
   CGroup: /system.slice/postfix.service
           ├─1965 /usr/libexec/postfix/master -w
           ├─1967 qmgr -l -t unix -u
           └─3545 pickup -l -t unix -u

Aug 24 15:59:31 ruozedata001 systemd[1]: Starting Postfix Mail Transport Agent...
Aug 24 15:59:32 ruozedata001 postfix/postfix-script[1963]: starting the Postfix mail system
Aug 24 15:59:32 ruozedata001 postfix/master[1965]: daemon started -- version 2.10.1, configurat...ix
Aug 24 15:59:32 ruozedata001 systemd[1]: Started Postfix Mail Transport Agent.
Hint: Some lines were ellipsized, use -l to show in full.

5.创建认证

[hadoop@ruozedata001 ~]$ mkdir -p ~/.certs/ 
[hadoop@ruozedata001 ~]$ echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE -/,/-END [hadoop@ruozedata001 ~]$ CERTIFICATE-/p' > ~/.certs/qq.crt 
[hadoop@ruozedata001 ~]$ certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt 
[hadoop@ruozedata001 ~]$ certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt 
[hadoop@ruozedata001 ~]$ certutil -L -d ~/.certs
[hadoop@ruozedata001 ~]$ cd ~/.certs 
[hadoop@ruozedata001 ~]$ certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
# 成功输出
Notice: Trust flag u is set automatically if the private key is present.

6.配置邮件发送者

[root@ruozedata001 ~]# vim /etc/mail.rc
# 底部添加发送着信息
set from=1115346515@qq.com	#邮箱
set smtp=smtps://smtp.qq.com:465 
set smtp-auth-user=1115346515 #QQ号
set smtp-auth-password=********** #刚才申请的授权码
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/home/hadoop/.certs # 认证文件路径,注意根据自己用户的路径填写不要盲目复制

7.测试

[hadoop@ruozedata001 ~]$ echo "邮件正文" | mail -s "邮件主题"  1115346515@qq.com

1

8.实时查看 Linux 日志

[root@ruozedata001 ~]# tail -f /var/log/maillog

9.生产上使用

9.1 发邮件不不带附件

EMAILFROM=503757851@qq.com
EMAILTO=503757851@qq.com # 多个接受者用 , 分割
echo -e "`date "+%Y-%m-%d %H:%M:%S"` : The current running $JOB_NAME job num is $RUNNINGNUM in 192.168.137.201 ......" | mail \
-r "From: alertAdmin <${EMAILFROM}>" \
-s "Warn: Skip the new $JOB_NAME spark job." ${EMAILTO}

9.2 发邮件带附件

echo -e "`date "+%Y-%m-%d %H:%M:%S"` : Please to check the fail sql attachement."|mailx \
-r "From: alertAdmin <${EMAILFROM}>" \
-a error.log \
-s "Critical:KSSH fail sql." ${EMAILTO}
<think>我们正在解决CentOS7邮件发送失败的问题,需要分析相关日志。 根据引用[3]中的信息,邮件发送失败时出现了535错误,提示认证失败。 引用[2]和[4]指出,系统日志通常位于/var/log目录下,其中邮件日志可能记录在/var/log/maillog中。 因此,解决步骤: 1. 检查邮件日志(/var/log/maillog)以获取详细的错误信息。 2. 根据日志中的错误信息,分析原因并解决。 常见原因: - 邮件服务器配置错误(如发件服务器、端口、认证信息等) - SELinux阻止了邮件发送(之前的问题中提到了SELinux,所以也要考虑) - 防火墙阻止了邮件发送端口(如25、465、587等) 具体步骤: 步骤1:查看邮件日志 使用命令:`tail -f /var/log/maillog` 或 `cat /var/log/maillog | grep error` 来查找错误信息。 步骤2:根据日志错误信息进行诊断 例如,如果日志中出现“SASL authentication failed”等,说明认证失败,需要检查邮件账户和密码。 步骤3:检查邮件客户端配置 如果使用mail命令,检查/etc/mail.rc文件中的配置,例如: ``` set from=your_email@example.com set smtp=smtp.example.com set smtp-auth-user=username set smtp-auth-password=password set smtp-auth=login set smtp-use-starttls set ssl-verify=ignore ``` 步骤4:检查SELinux状态 如果SELinux处于enforcing模式,可能会阻止邮件发送。可以暂时将SELinux设置为permissive模式测试: ```bash setenforce 0 ``` 然后再次发送邮件,如果成功,说明是SELinux问题。需要调整SELinux策略,例如允许邮件发送: ```bash setsebool -P httpd_can_sendmail=1 # 如果是通过web服务器发送邮件 或者 setsebool -P allow_postfix_local_write_mail_spool=1 # 如果是postfix ``` 步骤5:检查防火墙 如果邮件服务器使用非标准端口,确保防火墙开放该端口。例如,使用端口587: ```bash firewall-cmd --add-port=587/tcp --permanent firewall-cmd --reload ``` 步骤6:测试邮件发送 使用命令发送测试邮件: ```bash echo "Test mail" | mail -s "Test" recipient@example.com ``` 如果问题仍然存在,根据日志中的具体错误信息进一步排查。 注意:引用[3]中提到的535错误,通常是由于邮件服务商的SMTP服务需要开启授权码登录,而不是使用邮箱密码。需要检查是否在配置中使用了正确的授权码。 另外,引用[1]和[2]提到的日志文件位置,如果找不到/var/log/maillog,可以查看/var/log/messages中是否有邮件相关的日志。 总结:通过日志定位问题,然后逐一排查配置、SELinux、防火墙和邮件服务商的要求。</think>### CentOS7邮件发送失败问题分析与解决 #### 1. **定位邮件日志** CentOS7邮件日志主要存储在: ```bash /var/log/maillog # 主邮件日志[^2][^4] /var/log/messages # 系统综合日志[^2] ``` 查看实时日志: ```bash tail -f /var/log/maillog ``` #### 2. **分析常见错误类型** 根据引用[3]中的535错误示例,常见问题包括: | 错误代码 | 含义 | 解决方案 | |---------|------|---------| | **535** | 认证失败 | 检查SMTP账户/密码/授权码 | | **554** | 垃圾邮件拦截 | 配置SPF/DKIM记录 | | **550** | 邮箱不存在 | 验证收件人地址 | | **421** | 服务不可用 | 检查SMTP服务器状态 | #### 3. **关键排查步骤 ##### (1) 检查邮件服务状态 ```bash systemctl status postfix # 默认邮件服务 systemctl status sendmail # 替代邮件服务 ``` ##### (2) 验证SMTP配置 检查`/etc/mail.rc`配置: ```bash grep -E "smtp|auth" /etc/mail.rc ``` 正确配置示例: ``` set smtp=smtp.example.com:587 set smtp-auth=login set smtp-auth-user=your_email@example.com set smtp-auth-password=your_password ``` ##### (3) SELinux权限检查 ```bash # 查看SELinux是否阻止邮件发送 grep "avc:.*denied" /var/log/audit/audit.log | grep smtp # 临时允许邮件发送 setsebool -P httpd_can_sendmail 1 ``` ##### (4) 防火墙端口检查 ```bash # 查看开放端口 firewall-cmd --list-ports # 添加SMTP端口 firewall-cmd --permanent --add-port={25,465,587}/tcp firewall-cmd --reload ``` #### 4. 完整诊断流程 ```bash # 步骤1:发送测试邮件 echo "Test mail" | mail -s "Test" recipient@example.com # 步骤2:实时监控日志 tail -f /var/log/maillog /var/log/messages # 步骤3:解析错误代码 grep -E "fail|error|reject" /var/log/maillog # 步骤4:检查网络连通性 telnet smtp.example.com 587 ``` #### 5. 腾讯邮箱535错误专项解决 引用[3]中535错误的解决方法: 1. 登录QQ邮箱 → 设置 → 账户 2. 开启`POP3/SMTP服务` 3. 获取`授权码`(非登录密码) 4. 修改配置: ```bash # /etc/mail.rc set smtp-auth-password=你的授权码 ``` > **注意**:Gmail等邮箱需额外开启"低安全性应用访问"[^3] #### 6. 邮件服务器测试命令 ```bash # 手动SMTP测试 openssl s_client -connect smtp.example.com:587 -starttls smtp ``` 通过以上步骤,90%的邮件发送问题可被定位解决。若问题持续,请提供`/var/log/maillog`中的错误代码片段进行深度分析。
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值