简单解决网站中无法使用SMTP发送邮件的问题 4月28日
有许多的虚拟主机都禁止了 MAIL 函数,当然、也是因为防止垃圾邮件的诞生,但是也影响了一部分客户
许多的用户就会选择使用 SMTP 来发送邮件,但是有些主机看着探针支持 SMTP 但是却无法发邮件是啥回事?今天我就来说说几种解决方式吧,如果遇见了错误但不懂如何解决的请看!(以Wordpress示范)
一、修改发信端口
这个是最低级的一个错误之一,就是端口错误。很多人喜欢乱写,但是常用的有 25、465、587 等。
如果使用常用无 SSL 发信端口没有用的话,就用 SSL 的!例如 465 这样(许多邮箱的端口不同)的端口。
二、替换发信函数
正常情况下 SMTP 都是使用 fsockopen 函数来发信的,当然、如果禁用了我们还可以用其他的!
1. 替换为 pfsockopen 函数:
在 “wp-includes” 下找到 “class-smtp.php” 并搜索 “fsockopen” 大约会得出以下结果:
在前面加一个 “p” 就可以了,最好是小写。然后保存上传,如果无误的话、你的网站已经可以发信了。
2. 使用 stream_socket_client 函数:
同样是找到 “class-smtp.php” 并搜索 “fsockopen”,替换如下代码:
@fsockopen($host,
把上面的代码替换成:
@stream_socket_client($host.":".$port,
如果不是很懂的话,请看图:
如果第一种方法不行,这种方法一般都是不行的了 ...... 不要沮丧,有高手还自定义函数的、我就不介绍了
三、使用一些神奇的插件
这个可能性就非常的小啦,不过先前看到有一个人发布的一个插件、可以支持任意主机发信。具体的可能是本地收取了发信内容之后:传送到发信平台(私人或公有的发信服务器、类似百度 BCMS 这种),然后同意进行传送。
我没有多余的服务器,我也就不搞这些事情了。有时间的话我会去做一个 BCMS 的插件如何呢?
小结
这篇文章也是献给创智主机不可发信的孩纸们,不要担心、无论如何,迟早有解决办法的!
- 本篇文章没有Trackback
Typecho折腾一天了,断在SMTP connct() fail这一步
弱弱问下,EMLOG如何解决?
额,也是主机不支持吗?EMLOG 貌似有相关的 SMTP 插件,修改插件里面的 smtp.class.php 即可
Mark,可能用到~
有些服务器如果sendmail这类的坏了你的方法全部无效
额,如果是这样我宁愿不用那个主机
至今不明白我上次不能发信的原因是什么。。。还
我也搞不清楚,不过的确是有的用户可以有的用户不可以 。。
我的主机没禁用mail函数,也发不了邮件
难说,有些主机探针可能看得出来没有禁用、但是事实上是禁用了的。
或者说如果你是 windows 的主机的话 。。。。。。
查一查是不是VPS禁用函数或者端口。。。
大多数的免费主机商都喜欢禁用函数和端口,怕惹到同行了 。。。
好吧,hostyi好像很难发邮件
用我的方法完全无压力
@Tomas: 能不能传授一个PHP代码调用SMTP发邮件的
话说可以使用 function 实现,但是我使用的时候完全无效啊
BCMS 研究过,表示问题很大,用官方的 sdk 都没法发信。
P.S. 亲,转载了哈,www.sxb.pw/61.html
支持转载注明的孩纸~
BCMS貌似正常的啊,只是暂时来说不可以发短信了
@Tomas: 不,我用官方的 sdk 也报错。。650 错误。。就是发邮件
纳尼,你直接使用?官方 SDK 好像是拿来调用的吧
stream_socket_client这用得太少了,我一般都disable掉的。
一般来说pfsockopen比fsockopen的优点在于它会保持长连接,这样就不会对目标服务器造成太大的影响。曾经有段时间网络上有用fsockopen这个函数进行大规模DDoS的,所以好多人都封掉这个函数了。
所谓任意主机发信,感觉比较不可能。因为发信的基础是与外界通信,而把fsocksopen和pfsocksopen都禁用掉的IDC来说,肯定会顺手allow_url_fopen和curl都禁用掉的……这么一来与外界的通讯基本是没可能了= =
唉,表示一个好的主机是必要的的。如果实在不行就用 VPS 去~
果断拿走沙发。
欢迎沙发~撒花~