解决:mail() : Failed to connect to mailserver at "127.0.0.1" port 25

本文介绍了解决PHP中使用mail()函数发送邮件时遇到连接失败及无法中继的问题的方法。通过配置IIS自带的SMTP服务并正确设置虚拟服务器的访问权限,确保邮件能够正常发送。
当出现:
warning: mail() [function.mail]: Failed to connect to mailserver at "127.0.0.1" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in E:\TOOL\Apache\htdocs\rzchina_beta\club\includes\mail.inc on line 193.
Unable to send e-mail. Please contact the site administrator if the problem persis
ts .
或出现:
mail(): SMTP server response: 550 5.7.1 Unable to relay for
错误。
解决办法:
安装IIS自带的SMTP,在SMTP虚拟服务器上点击右键,在弹出的属性窗口里进行如下设置:
点击访问选项卡,再点击中继,在弹出的窗口出点击添加,然后选单台计算机,添加IP地址为 127.0.0.1。然后一路确定返回。(不进行此项设置,可能会出现:SMTP server response: 550 5.7.1 Unable to relay for zf1315@sina.com。。。的错误)
测试一下:
<?php
mail("linchangfu@126.com","测试","测试是否收到");
?>
C:\ProgramData\Jenkins\.jenkins\workspace\auto-api-test>python run.py 2025-11-01 23:26:35,185 - INFO - 开始运行测试.... 2025-11-01 23:26:35,187 - INFO - 使用环境配置:test 2025-11-01 23:26:35,187 - INFO - 基础url:http://127.0.0.1:5000 2025-11-01 23:26:35,187 - INFO - 日志路径: ./logs/test.log 2025-11-01 23:26:35,190 - INFO - 开始执行测试.. 开始运行测试 使用环境配置:test 基础url:http://127.0.0.1:5000 日志路径: ./logs/test.log 已创建报告目录 ============================= test session starts ============================= platform win32 -- Python 3.13.0, pytest-7.4.3, pluggy-1.6.0 -- C:\Users\Admin\AppData\Local\Programs\Python\Python313\python.exe cachedir: .pytest_cache metadata: {'Python': '3.13.0', 'Platform': 'Windows-11-10.0.26100-SP0', 'Packages': {'pytest': '7.4.3', 'pluggy': '1.6.0'}, 'Plugins': {'allure-pytest': '2.13.2', 'Faker': '37.5.3', 'html': '4.1.1', 'metadata': '3.1.1'}, 'CI': 'true', 'BUILD_NUMBER': '82', 'BUILD_ID': '82', 'BUILD_URL': 'http://localhost:8080/job/auto-api-test/82/', 'NODE_NAME': 'built-in', 'JOB_NAME': 'auto-api-test', 'BUILD_TAG': 'jenkins-auto-api-test-82', 'EXECUTOR_NUMBER': '0', 'JENKINS_URL': 'http://localhost:8080/', 'JAVA_HOME': 'C:\\Program Files\\Java\\jdk-21', 'WORKSPACE': 'C:\\ProgramData\\Jenkins\\.jenkins\\workspace\\auto-api-test', 'GIT_COMMIT': '7cdab6ad7e5dc35917f742387810251caa778788', 'GIT_URL': 'https://gitee.com/weike1234/api_auto_test.git', 'GIT_BRANCH': 'origin/master'} rootdir: C:\ProgramData\Jenkins\.jenkins\workspace\auto-api-test plugins: allure-pytest-2.13.2, Faker-37.5.3, html-4.1.1, metadata-3.1.1 collecting ... collected 2 items testcases/test_user_api.py::TestUserAPI::test_login[case0] PASSED [ 50%] testcases/test_user_api.py::TestUserAPI::test_login[case1] PASSED [100%]2025-11-01 23:26:35,548 - INFO - 测试执行完成,退出码0 2025-11-01 23:26:35,548 - INFO - 已生成环境配置 2025-11-01 23:26:35,548 - INFO - 测试执行器退出,退出码:None ============================== 2 passed in 0.11s ============================== 测试执行完成,退出码0 C:\ProgramData\Jenkins\.jenkins\workspace\auto-api-test>exit 0 [auto-api-test] $ C:\ProgramData\Jenkins\.jenkins\allure-2.35.1\bin\allure.bat generate C:\ProgramData\Jenkins\.jenkins\workspace\auto-api-test\reports\allure-results -c -o C:\ProgramData\Jenkins\.jenkins\workspace\auto-api-test\allure-report Report successfully generated to C:\ProgramData\Jenkins\.jenkins\workspace\auto-api-test\allure-report Allure report was successfully generated. Creating artifact for the build. Artifact was added to the build. Checking for post-build Performing post-build step Checking if email needs to be generated Email was triggered for: Always Sending email for trigger: Always Sending mail from default account using custom from address 1943564708@qq.com messageContentType = text/html; charset=UTF-8 Adding recipients from project recipient list Analyzing: 1943564708@qq.com Looking for: 1943564708@qq.com starting at: 0 firstFoundIdx: 0 firstFoundIdx-substring: 1943564708@qq.com => found type: 0 Analyzing: 1943564708@qq.com Looking for: 1943564708@qq.com starting at: 0 firstFoundIdx: 0 firstFoundIdx-substring: 1943564708@qq.com => found type: 0 Analyzing: 1943564708@qq.com Looking for: 1943564708@qq.com starting at: 0 firstFoundIdx: 0 firstFoundIdx-substring: 1943564708@qq.com => found type: 0 Adding recipients from trigger recipient list Successfully created MimeMessage Sending email to: 1943564708@qq.com DEBUG: getProvider() returning jakarta.mail.Provider[TRANSPORT,smtp,org.eclipse.angus.mail.smtp.SMTPTransport,Oracle] DEBUG SMTP: need username and password for authentication DEBUG SMTP: protocolConnect returning false, host=smtp.qq.com, user=我的4060TI$, password=<null> DEBUG SMTP: useEhlo true, useAuth true DEBUG SMTP: trying to connect to host "smtp.qq.com", port 465, isSSL false 220 newxmesmtplogicsvrszb20-0.qq.com XMail Esmtp QQ Mail Server. DEBUG SMTP: connected to host "smtp.qq.com", port: 465 EHLO host.docker.internal 250-newxmesmtplogicsvrszb20-0.qq.com 250-PIPELINING 250-SIZE 73400320 250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 250-AUTH=LOGIN 250-MAILCOMPRESS 250-SMTPUTF8 250 8BITMIME DEBUG SMTP: Found extension "PIPELINING", arg "" DEBUG SMTP: Found extension "SIZE", arg "73400320" DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2" DEBUG SMTP: Found extension "AUTH=LOGIN", arg "" DEBUG SMTP: Found extension "MAILCOMPRESS", arg "" DEBUG SMTP: Found extension "SMTPUTF8", arg "" DEBUG SMTP: Found extension "8BITMIME", arg "" DEBUG SMTP: protocolConnect login, host=smtp.qq.com, user=weike1234, password=<non-null> DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM XOAUTH2 DEBUG SMTP: Using mechanism LOGIN DEBUG SMTP: AUTH LOGIN command trace suppressed DEBUG SMTP: AUTH LOGIN failed AuthenticationFailedException message: 535 Login fail. Account is abnormal, service is not open, password is incorrect, login frequency limited, or system is busy. More information at https://help.mail.qq.com/detail/108/1023 这是什么问题
11-02
当使用 `curl` 命令访问本地 7890 端口时出现 `Failed to connect to 127.0.0.1 port 7890: Connection refused` 错误,通常表示目标服务未运行、端口未监听或存在网络配置问题。以下是一些常见的排查步骤和解决方法: ### 检查本地服务是否运行 确保你试图访问的服务正在运行,并且绑定到了正确的 IP 地址和端口上。例如,如果服务是通过 systemd 管理的,则可以使用如下命令检查其状态: ```bash systemctl status <service-name> ``` 如果服务没有运行,尝试启动它: ```bash sudo systemctl start <service-name> ``` ### 验证端口监听情况 确认 7890 端口是否被正确监听。你可以使用 `netstat` 或 `ss` 命令来查看: ```bash sudo netstat -tuln | grep 7890 # 或者 sudo ss -tuln | grep 7890 ``` 如果没有看到任何输出,说明该端口并未被监听,可能是服务未启动或配置错误。 ### 检查防火墙设置 即使服务在运行并且端口也在监听,也可能因为防火墙规则而阻止了连接。你需要检查系统上的防火墙设置并确保 7890 端口是开放的。 ```bash sudo ufw status # 如果需要开放端口 sudo ufw allow 7890/tcp ``` ### 测试本地回环接口 有时候问题可能出在本地回环(loopback)接口的配置上。尝试 ping 127.0.0.1 来验证回环接口是否正常工作: ```bash ping -c 4 127.0.0.1 ``` 如果无法响应,这可能意味着网络堆栈存在问题。 ### 检查 hosts 文件 确保 `/etc/hosts` 中包含正确的 localhost 解析条目,一般应有如下内容: ``` 127.0.0.1 localhost ::1 localhost ``` 如果缺失,请添加这些行以保证 localhost 能够正确解析。 ### 使用 curl 的 --verbose 选项 使用 `-v` 参数可以让 `curl` 提供更详细的诊断信息,有助于进一步定位问题: ```bash curl -v http://127.0.0.1:7890 ``` ### 检查应用特定的日志 查看相关服务的日志文件,如 `/var/log/<service-name>.log`,寻找可能导致服务异常的信息。 ### 示例:启动一个临时 HTTP 服务器进行测试 如果你只是想快速测试 7890 端口是否可达,可以使用 Python 启动一个简单的 HTTP 服务器: ```bash python3 -m http.server 7890 ``` 然后再次尝试用 `curl` 访问这个端口。 --- 通过以上步骤,应该能够帮助识别导致连接拒绝的具体原因。根据具体情况调整上述建议中的具体命令和服务名称。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值