有许多的虚拟主机都禁止了 MAIL 函数,当然、也是因为防止垃圾邮件的诞生,但是也影响了一部分客户

21a4462309f79052e416b31d0cf3d7ca7bcbd58c

许多的用户就会选择使用 SMTP 来发送邮件,但是有些主机看着探针支持 SMTP 但是却无法发邮件是啥回事?今天我就来说说几种解决方式吧,如果遇见了错误但不懂如何解决的请看!(以Wordpress示范)

一、修改发信端口

这个是最低级的一个错误之一,就是端口错误。很多人喜欢乱写,但是常用的有 25、465、587 等。

如果使用常用无 SSL 发信端口没有用的话,就用 SSL 的!例如 465 这样(许多邮箱的端口不同)的端口。

二、替换发信函数

正常情况下 SMTP 都是使用 fsockopen 函数来发信的,当然、如果禁用了我们还可以用其他的!

1. 替换为 pfsockopen 函数:

在 “wp-includes” 下找到 “class-smtp.php” 并搜索 “fsockopen” 大约会得出以下结果:

smtp002

 

在前面加一个 “p” 就可以了,最好是小写。然后保存上传,如果无误的话、你的网站已经可以发信了。

2. 使用 stream_socket_client 函数:

同样是找到 “class-smtp.php” 并搜索 “fsockopen”,替换如下代码:

@fsockopen($host,

把上面的代码替换成:

@stream_socket_client($host.":".$port,

如果不是很懂的话,请看图:

smtp003

如果第一种方法不行,这种方法一般都是不行的了 ...... 不要沮丧,有高手还自定义函数的、我就不介绍了

三、使用一些神奇的插件

这个可能性就非常的小啦,不过先前看到有一个人发布的一个插件、可以支持任意主机发信。具体的可能是本地收取了发信内容之后:传送到发信平台(私人或公有的发信服务器、类似百度 BCMS 这种),然后同意进行传送。

我没有多余的服务器,我也就不搞这些事情了。有时间的话我会去做一个 BCMS 的插件如何呢?


小结

这篇文章也是献给创智主机不可发信的孩纸们,不要担心、无论如何,迟早有解决办法的!

目前有24条回应
Comment
Trackback
Loading ....
  • Roogle 回应于3周前 回复TA

    Typecho折腾一天了,断在SMTP connct() fail这一步

  • liuyanyk 回应于2013/07/10 18:09 回复TA

    弱弱问下,EMLOG如何解决?

    • Tomas 回应于2013/07/12 14:51 回复TA

      额,也是主机不支持吗?EMLOG 貌似有相关的 SMTP 插件,修改插件里面的 smtp.class.php 即可

  • liuyanyk 回应于2013/07/10 18:07 回复TA

    Mark,可能用到~

  • ivmm 回应于2013/04/29 13:46 回复TA

    有些服务器如果sendmail这类的坏了你的方法全部无效

    • Tomas 回应于2013/04/29 15:22 回复TA

      额,如果是这样我宁愿不用那个主机

  • OYOY 回应于2013/04/29 12:42 回复TA

    至今不明白我上次不能发信的原因是什么。。。还

    • Tomas 回应于2013/04/29 15:22 回复TA

      我也搞不清楚,不过的确是有的用户可以有的用户不可以 。。

  • voncing 回应于2013/04/28 22:57 回复TA

    我的主机没禁用mail函数,也发不了邮件

    • Tomas 回应于2013/04/29 10:18 回复TA

      难说,有些主机探针可能看得出来没有禁用、但是事实上是禁用了的。

      或者说如果你是 windows 的主机的话 。。。。。。

  • 免费资源部落 回应于2013/04/28 21:25 回复TA

    查一查是不是VPS禁用函数或者端口。。。

    • Tomas 回应于2013/04/29 10:16 回复TA

      大多数的免费主机商都喜欢禁用函数和端口,怕惹到同行了 。。。

  • 烟花易冷 回应于2013/04/28 19:01 回复TA

    好吧,hostyi好像很难发邮件

    • Tomas 回应于2013/04/28 21:19 回复TA

      用我的方法完全无压力

      • 烟花易冷 回应于2013/04/28 21:36 回复TA

        @Tomas: 能不能传授一个PHP代码调用SMTP发邮件的

        • Tomas 回应于2013/04/29 10:17 回复TA

          话说可以使用 function 实现,但是我使用的时候完全无效啊

  • sxbxjhwm 回应于2013/04/28 16:08 回复TA

    BCMS 研究过,表示问题很大,用官方的 sdk 都没法发信。

    P.S. 亲,转载了哈,www.sxb.pw/61.html

    • Tomas 回应于2013/04/28 18:00 回复TA

      支持转载注明的孩纸~

      BCMS貌似正常的啊,只是暂时来说不可以发短信了

      • sxbxjhwm 回应于2013/04/28 23:02 回复TA

        @Tomas: 不,我用官方的 sdk 也报错。。650 错误。。就是发邮件

        • Tomas 回应于2013/04/29 10:18 回复TA

          纳尼,你直接使用?官方 SDK 好像是拿来调用的吧

  • oott123 回应于2013/04/28 10:53 回复TA

    stream_socket_client这用得太少了,我一般都disable掉的。
    一般来说pfsockopen比fsockopen的优点在于它会保持长连接,这样就不会对目标服务器造成太大的影响。曾经有段时间网络上有用fsockopen这个函数进行大规模DDoS的,所以好多人都封掉这个函数了。
    所谓任意主机发信,感觉比较不可能。因为发信的基础是与外界通信,而把fsocksopen和pfsocksopen都禁用掉的IDC来说,肯定会顺手allow_url_fopen和curl都禁用掉的……这么一来与外界的通讯基本是没可能了= =

    • Tomas 回应于2013/04/28 17:57 回复TA

      唉,表示一个好的主机是必要的的。如果实在不行就用 VPS 去~

  • 小五 回应于2013/04/28 10:08 回复TA

    果断拿走沙发。

  • 本篇文章没有Trackback
你目前的身份是游客,请输入昵称和电邮!