这几天一直在写一个php发送邮件的功能,在本机测试的时候一直很正常,但是放在服务器上测试的时候,就总提示Error: Could not connect to SMTP host.

首先说一下,我用的是phpmailer这个第三方的开源项目作为发邮件的基类,通过实例化PHPMailer对象采用SMTP协议来发送邮件。php发送邮件的原理是通过php向邮件服务器创建一个socket,然后再根据smtp协议传输邮箱账号、密码、要发送到的邮箱地址、抄送、主题、内容、附件等等,其实phpmailer还是很好用的。
刚开始出现这个问题的时候,上网查了,说是可能是Apache禁用了php创建socket用到的fsockopen函数被禁用了,可以换成pfsockopen函数,我换了之后,还是没用,后来我通过function_exists函数检测了一下,发现fsockopen并没有被禁用,这里推荐一篇日志,讲了这种情况的解决办法(http://bbs.tianya.cn/post-414-46078-1.shtml),至于fsockopen和pfsockopen的区别,可以去PHP的官网查看,但是一般来说,不推荐pfsockopen函数创建socket。
之后我继续在网上找,发现了一个最有可能的问题,就是linux下的selinux安全机制,selinux在默认状态下,不会允许Apache创建一个连接外部服务器的socket,如果想要创建socket,必须要配置一下,或者要root权限才可以,这里推荐一篇日志,讲了这种情况的解决办法(http://hi.baidu.com/kinomn/item/e81fd5ee77a913245b2d6425),关于selinux的知识,也请自行Google。
现在说说我是怎么解决的。其实很简单,就是将代码中的SMTP服务器的地址,改成godaddy虚拟主机供应商自己的SMTP服务器即可(relay-hosting.secureserver.net)也是看了一篇日志才知道的,这里给出地址(http://www.melongda.com.cn/News/Staff_Blog/Web_Software_Development/show_83.html),在这篇日志里,说不需要发送邮件的邮箱账号和密码,但是经过我的测试,还是需要的,我的发送邮件部分的代码如下(只是截取了很小一部分,代码不能直接运行,请自行修改):
        $mail = new PHPMailer(TRUE);//用SMTP协议发送$mail -> IsSMTP();try {// 设置调试等级// 1 = errors and messages// 2 = messages only//$mail -> SMTPDebug = 2;// 是否启用SMTP认证$mail -> SMTPAuth = TRUE;//设置SMTP服务器$mail -> Host = "relay-hosting.secureserver.net";//发件邮箱地址$mail -> Username = "****@****.com";//发件邮箱密码$mail -> Password = "*********";//发件邮箱地址和名字$mail -> SetFrom('****@****.com', 'SSSSS');//回信地址$mail -> AddReplyTo("****@****.com", "SSSSS");//自动换行字符数$mail -> WordWrap = 50;//主题$mail -> Subject = $subject;//$mail -> AltBody = "To view the message, please use an HTML compatible email viewer!";//邮件正文$mail -> MsgHTML($message);// 收件邮箱地址$mail -> AddAddress($to_mail);$mail -> Send();//发送成功echo "发送成功";} catch (phpmailerException $e) {echo "phpmailerException:" . $e -> errorMessage();//Pretty error messages from PHPMailer} catch (Exception $e) {echo "Exception:" . $e -> getMessage();//Boring error messages from anything else!}

后来和项目组的同学还有老师讨论了一下,可能是因为 godaddy虚拟主机供应商害怕遭受垃圾邮件的攻击,或者自己成为肉机,所以才要如此严格限制socket的安全,根据我的猜想,他们所做的邮件服务器可能起到的只是一个检查、转发作用,他们应该是在获得你提交的信息之后,通过你的发送邮件的邮箱账号,再将你提交给他的内容,提交给真正的发邮件的那个SMTP服务器,不过这也只是我的猜想,如果大家还有什么想法,可以留言,一起讨论一下

在美国godaddy虚拟主机上用php发邮件应该注意的问题相关推荐

  1. 虚拟主机上用Asp.net实现Urlrewrite

    在网上看到,很多朋友在asp.net中做urlrewrite,用的是HttpHandle+Server.Transfer的方法.其实这种方法是错误的.第一,HttpHandle是实现不了urlrewr ...

  2. 在虚拟主机上 php下载,在虚拟主机上复制安装本机Pear_PHP教程

    在国内租来的虚拟主机上,有部分主机本身就提供了pear类库,但是不用指望它们会给你升级或安装需要的pear包.在这种情况下,可以尝试在自己的虚拟主机下安装一份pear. 通过ssh安装pear 国内绝 ...

  3. 使用phpstorm连接云虚拟主机上的MySQL数据库踩坑之路;

    早上接到阿里云客服的电话,告知我之前买的云虚拟机快到期了,问我要不要续费,我去看了下控制台,感觉自己留着这个还是蛮有用的,就续费了,随便翻了下控制台,看见虚拟机上面的数据库还没怎么用过,就想着利用一下 ...

  4. 虚拟主机上传SQLServer数据库--不完全资料

    数据库怎么上传至虚拟主机呢?        很多人估计遇到过这种问题吧?没有具体的实践,别人说的再怎么详细也都理解的不深刻. 下面说一下我的经验: 1.首先得有公司做后盾哦,前提是公司已经租用了个虚拟 ...

  5. godaddy php mail,如何使用godaddy web主机上的phpmailer通过365发送电子邮件

    我要用phpmailer lib通过365发送电子邮件. 这是我的配置 MAIL_DRIVER=smtp MAIL_HOST=smtp.office365.com MAIL_PORT=587 MAIL ...

  6. 如何将HEXO部署到虚拟主机上

    注:目前开通个人网站朝思录,之后的博文将在上面更新,CSDN博客会滞后一点 最近接触了一段时间的HEXO,自己没有网页开发经验如盲人摸象,折腾了很久才有些门目. HEXO是一个静态网页生成工具,如果将 ...

  7. laravel 怎么部署到万网的虚拟主机上?

    改变一下Laravel的文件目录结构,为应用选择低位的加密方式,就可以在万网云虚拟主机上成功运行. 拿laravel5.1来说: 在根目录下创建一个local文件夹,把网站根目录下除了public文件 ...

  8. godaddy服务器做网站,godaddy虚拟主机怎么使用

    godaddy虚拟主机是国外的一家大型网站主机服务商,很多在国外的网站都放在godaddy虚拟主机上.也有国内的站长在制作外贸网站时,也先选择godaddy虚拟主机. 有些站长购买了godaddy虚拟 ...

  9. B站大量虚拟主播被集体强制退款:收入蒸发,还倒欠B站;乔布斯被追授美国总统自由勋章;Grafana 9 发布|极客头条

    「极客头条」-- 技术人员的新闻圈! CSDN 的读者朋友们早上好哇,「极客头条」来啦,快来看今天都有哪些值得我们技术人关注的重要新闻吧. 整理 | 梦依丹 出品 | CSDN(ID:CSDNnews ...

最新文章

  1. linux mysql内网_在Linux中mysql的一些基本操作
  2. JAVA File方法各类文件复制操作
  3. LeetCode Algorithm 103. 二叉树的锯齿形层序遍历
  4. Javascript实现MD5加密
  5. 【大会】网络性能、安全与成本之困
  6. 怎么样用System.out.println在控制台打印出颜色
  7. python综合管理系统_Python-20 (信息系统-框架/循环/增删/综合应用)
  8. java定义变量的输入_Terraform中输入变量
  9. mysql数据库容量和性能_新品速递丨容量盘性能提升超 300%,数据库支持 MySQL 8.0...
  10. 百度前端学院参考答案:第二十五天到第二十七天 倒数开始 滴答滴 滴答滴(2)...
  11. 数学图形(1.47)贝塞尔(Bézier)曲线
  12. 大企业中,Java面试官最爱问的问题集锦(2)
  13. Code::Blocks IDE - Open Source, Cross-platform Free C++ IDE
  14. 七彩虹SL500固态硬盘,慧荣SM2258XT主控成功开卡成MLC模式。上教程和软件链接
  15. 两台电脑之间串口传输文件
  16. jump大乱斗维护服务器,Jump大乱斗常见问题解决方法_Jump大乱斗常见问题解决及按键设置方法_飞翔教程...
  17. Mongo入门-2-基本操作
  18. 给电视剧标注人脸的简单步骤:
  19. Pycharm 常用快捷键大全【快查字典版】
  20. poi 生成word 表格,并向表格单元格中插入多个图片

热门文章

  1. pdo mysql num rows_PDO参数说明
  2. 最新v6.0 tgroupon分销系统源码+TGROUPON卖货系统 ECSHOP+ECTOUCH内核
  3. 【读书笔记】《学会提问》——受用一生的批判性思维
  4. Qt绘制星空图及卫星视图坐标
  5. Unity 使用贝塞尔曲线实现抛物线运动
  6. 安卓使用opengles显示深度点云图或深度3D效果图
  7. iPhone 蓝牙通信编程初步(网上收集)
  8. 虚拟机KALI2022.2下安装GVM
  9. 董淳光 - SQLITE3 使用总结
  10. ES的聚合操作(API版本)