我的ISP阻止了端口25从PHP发送邮件,而是允许使用端口587或465。 如何强制 PHP 邮件功能使用端口 587 而不是默认的 25?顺便说一句:我在OSX 10.6.6上使用MAMP PRO
更新:我尝试将php中的设置更改为.ini
[mail function]
; For Win32 only.
SMTP = localhost
smtp_port = 587
由于我在Mac上,我认为这对我来说不是解决方案,并且在我尝试后它不起作用。 它给了我以下错误消息。
May 6 20:32:25 Ibrahim-Armars-MacBook-Pro postfix/smtp[2822]: connect to alt2.aspmx.l.google.com[74.125.159.27]:25: Operation timed out
May 6 20:32:25 Ibrahim-Armars-MacBook-Pro postfix/smtp[2823]: connect to alt2.aspmx.l.google.com[74.125.159.27]:25: Operation timed out
May 6 20:32:25 Ibrahim-Armars-MacBook-Pro postfix/smtp[2827]: connect to alt2.aspmx.l.google.com[74.125.159.27]:25: Operation timed out
May 6 20:32:25 Ibrahim-Armars-MacBook-Pro postfix/smtp[2825]: connect to alt2.aspmx.l.google.com[74.125.159.27]:25: Operation timed out
May 6 20:32:25 Ibrahim-Armars-MacBook-Pro postfix/smtp[2828]: connect to alt2.aspmx.l.google.com[74.125.159.27]:25: Operation timed out
您看到它仍在尝试通过端口 25 连接? 如何在 Mac 中更改它?
更改smtp_port
只会影响mail()
与SMTP
设置指定的服务器的交互方式。 这不是问题所在。 问题是:
- 您正在使用本地计算机作为 SMTP 服务器 - 和 您的
- ISP 阻止您的本地 SMTP 服务器(后缀)将邮件中继到 Gmail
首先,阅读此线程。 它讨论了完全相同的问题。 结果是您需要使用不同的邮件服务器,最好是您的 ISP 邮件服务器。 如果您想使用他们的电子邮件服务,您的 ISP 会告诉您使用什么服务器和端口进行出站邮件? 您应该能够从本地运行的PHP中使用它,就像使用Thundebird等电子邮件客户端一样 - 并且您将能够发送到Gmail。
在 php.ini 中设置smtp_port = 587
。见 http://php.net/manual/en/mail.configuration.php
编辑
正如 AJ 所指出的,如果您使用本地后缀或 sendmail,这不会解决问题,您可以通过指定 smtp = localhost
.尝试将其设置为ISP的SMTP服务器地址。
如果它们在允许您发送邮件之前还需要身份验证,则可能会导致下一个问题,许多 ISP 都会这样做。在这种情况下,您最好的选择是梨邮件包。顺便说一下,这也允许您在脚本中指定邮件服务器和端口。从文档中:
$params["host"] - The server to connect. Default is localhost.
$params["port"] - The port to connect. Default is 25.
$params["auth"] - Whether or not to use SMTP authentication. Default is FALSE.
$params["username"] - The username to use for SMTP authentication.
$params["password"] - The password to use for SMTP authentication.
您可以编辑 php.ini 文件(如果您有访问权限)并设置smtp_port = 587
或在代码中设置ini_set('smtp_port', 587)
.
>如果可以,请尝试使用 ini_set() 覆盖smtp_port设置。应该是这样的:
ini_set('smtp_port', 587);
MAMP 并且由于端口 25 被 ISP 阻止而无法从 php mail() 函数发送邮件的人(在我的情况下),这里有一些信息供您解决。 因为OSX使用Postfix发送邮件,如果您打算使用外部SMTP服务器,例如我在这里使用的 smtp.gmail.com,因此您应该这样做。 您需要将后缀配置为将 Gmail 用作中继主机
a) 打开 MAMP 并在后缀中将外发邮件的域更改为 smtp.gmail.com
b) 打开终端并输入
sudo vi /etc/postfix/main.cf
这将要求您输入管理员密码,它将在 VI 编辑器中打开 main.cfc) 按 Ctrl+F 并来到文件末尾,将光标从末尾向下一行并按 A,编辑器现在将切换到插入模式以编辑文件。
在 main.cf 追加此设置
relayhost = [smtp.gmail.com]:587
smtp_tls_security_level = verify
#smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_session_cache_database = btree:/var/run/smtp_tls_session_cache
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
按 :WQ 退出 VIM。返回外壳,键入sudo vi /etc/postfix/sasl_passwd
并输入以下内容(替换您的Gmail地址和Gmail密码):
[smtp.gmail.com]:587 user@gmail.com:mypassword
再次按 :wq 保存并退出文件,然后运行以下命令
sudo postmap /etc/postfix/sasl_passwd
sudo postfix reload
希望这可以帮助遇到与我相同的问题的人。