PHP编写邮件发送的函数时候,会出现一个很奇怪的问题,那就是:

Warning: mail(): Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in .......
of course,这个红色不是网页上显示的,只是爲了这样说明,不过你可以设置显示的颜色,这个嘛,这个要留给你考究了。

通过internet搜索了相关的回答,包括相关的技术博客,大家都是很简单的阐述了解决方案.大多是只是提到修改:php.ini 中的[mail function] 函数,将smtp的相关功能进行打开即可,以下是详细的修改:
[mail function]
SMTP = localhost
smtp_port = 25
sendmail_from = youremailUsual@domin.com
;这裡有必要注释下,这个邮件是From方面.
sendmail_path = ""
;起初是空的,这裡在后面做说明.
mail_add_x_header = on
;这裡是默认on的 无需更改

到这一步,修改完毕,重启apache,当然这个操作,我实在CMD下操作的,话说这个操作,还闹了一个小笑话.How stupid i am !

重启完毕,刷新页面,错误仍然存在.

这裡陷入纠结的地步,stackoverflow 中提到了IIS(windows 默认的服务器),在控制面板-管理工具下竟然找不到这一项,由于是win7的缘故,在添加和删除程序下,把它开启即可,注意操作,后来可以在管理工具下找到,双击打开,此时看到smtp的项都很激动.双击打开,配置了相关的参数,如截图所示:

更正:此处忘了补发图片,特此道歉! 7-5号补正.进行在线转换

说句实话,这一步做的比较脑残,那上面是ASP.net的选项,管你PHP毛事.[反正就是没有成功].

痛定思痛,维基百科查了smtp的协议详细解释,连接Click Here:简单邮件协议
回来继续修改,[mail function],如下:
;以126邮箱的设置为例子
SMTP = smtp.126.com
smtp_port = 25
sendmail_from = my126EmailAddress@126.com
sendmail_path = ""
mail_add_x_header = on

同时修改了程序中$from变量的数值,为了保持一致.

[因为之前做了测试,程序中添加 phpinfo()函数,执行后,在页面搜索 mail项,你会发现会有一个 Localhost Value 和 master Value ,当然这个很好理解,Localhost Value指的是你程序中设置的数值,master Value是php.ini的设置]
执行后,神奇的错误消失了,不过出现了如下的错误:
mail(): SMTP server response: 553 You are not authorized to send mail, authentication is required aaf353e4-8ac5-416e-9cd5-6b54fc592764

之后改了其他的邮箱,如QQ,Gamil等,错误都如上面提示,看了一个熟悉的单词authorized ,就明白啥意思了.

到这一步貌似离成功不远了,想起以前使用客户端配置邮箱用户的时候,最后一步都会询问你是不是需要开启"服务器身份验证".最后一不小心搜到了一个叫做sendmail的文件包,下载地址如下:sendmail
之后,最好在PHP的根目录下新建一个文件夹,取名叫做:sendmail,之后托压缩包进去,再解压出来,修改一个叫做sendmail.ini的文件,修改的地方如下:

;take the fomus email provider in China 126 for example
[sendmail]
smtp_server= smtp.126.com
smtp_port=25
default_domin =126.com
auth_username= strings in your email address before char '@'
auth_password= your password which allow you to login in your email-box
hostname= 126.com

之后,你就要修改 php.ini,还是老地方:
SMTP = smtp.126.com
;这裡修改为localhost 也是一样,其他选项保持不变.
smtp_port = 25
sendmail_from = my126EmailAddress@126.com
sendmail_path = "your sendmail path/sendemail.exe -t "
;当然这个路径的前半部分必须包括你的PHP安装的根目录,将"\"换成"/",我想是必须要做的.
mail_add_x_header = on

到这裡配置完成,重启你的apache,刷新页面,错误的消失,因为程序中设置的$to是自己的126和QQ邮箱,当然循环发的.

当看到桌面右下角QQ上弹出三丰邮件提示的时候,I know that I resolve it .打开邮件的内容,和我在页面输入的内容完全一致,而且有些内容还是从本地的数据库中读出来的。

PHP学习笔记一:谁动了你的mail(),PHP?的更多相关文章

  1. 【Unity Shaders】学习笔记——SurfaceShader(五)让纹理动起来

    [Unity Shaders]学习笔记——SurfaceShader(五)让纹理动起来 转载请注明出处:http://www.cnblogs.com/-867259206/p/5611222.html ...

  2. 0003.5-20180422-自动化第四章-python基础学习笔记--脚本

    0003.5-20180422-自动化第四章-python基础学习笔记--脚本 1-shopping """ v = [ {"name": " ...

  3. Linux 学习笔记

    Linux学习笔记 请切换web视图查看,表格比较大,方法:视图>>web板式视图 博客园不能粘贴图片吗 http://wenku.baidu.com/view/bda1c3067fd53 ...

  4. Stealth视频教程学习笔记(第二章)

    Stealth视频教程学习笔记(第二章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...

  5. 阅读《LEARNING HARD C#学习笔记》知识点总结与摘要三

    最近工作较忙,手上有几个项目等着我独立开发设计,所以平时工作日的时候没有太多时间,下班累了就不想动,也就周末有点时间,今天我花了一个下午的时间来继续总结与整理书中要点,在整理的过程中,发现了书中的一些 ...

  6. WPF的Binding学习笔记(二)

    原文: http://www.cnblogs.com/pasoraku/archive/2012/10/25/2738428.htmlWPF的Binding学习笔记(二) 上次学了点点Binding的 ...

  7. java JDK8 学习笔记——第16章 整合数据库

    第十六章 整合数据库 16.1 JDBC入门 16.1.1 JDBC简介 1.JDBC是java联机数据库的标准规范.它定义了一组标准类与接口,标准API中的接口会有数据库厂商操作,称为JDBC驱动程 ...

  8. <老友记>学习笔记

    这是六个人的故事,从不服输而又有强烈控制欲的monica,未经世事的千金大小姐rachel,正直又专情的ross,幽默风趣的chandle,古怪迷人的phoebe,花心天真的joey——六个好友之间的 ...

  9. Kinect开发学习笔记之(一)Kinect介绍和应用

    Kinect开发学习笔记之(一)Kinect介绍和应用 zouxy09@qq.com http://blog.csdn.net/zouxy09 一.Kinect简单介绍 Kinectfor Xbox ...

随机推荐

  1. 使用DOM创建xml文件

    使用DOM创建xml文件 创建xml的代码如下: public class CreateXML { public static void main(String[] args) { DocumentB ...

  2. 使用css实现炫酷的横屏滚动效果

    炫酷的横屏滚动效果css实现 DEMO: https://codepen.io/kobako/pen/BxVLLm 我们对滚动条都不陌生.平时浏览的网页,进度条通常是垂直方向的,内容从上往下排列.但是 ...

  3. JSP学习笔记(4)-Javabean

    按照sun公司的定义,Javabean是一个可重复使用的软件组件,实际上Javabean是一种Java类,通过封装属性和方法成为具有某种功能或处理某个业务的对象,简称Bean,Javabean基于ja ...

  4. HDU4336 Card Collector(期望 状压 MinMax容斥)

    题意 题目链接 \(N\)个物品,每次得到第\(i\)个物品的概率为\(p_i\),而且有可能什么也得不到,问期望多少次能收集到全部\(N\)个物品 Sol 最直观的做法是直接状压,设\(f[sta] ...

  5. .NET Core 微服务架构-Docker部署

    本文主要介绍通过Docker来部署通过.NET Core开发的微服务架构,部署的微服务主要包括统一网关(使用Ocelot开发).统一认证(IdentityServer4).应用服务(ASP.NET C ...

  6. redis介绍(4)实战场景

    redis我主要在两方面说明: 集群下的session的管理 Tomcat 与 DB之间缓存

  7. 聊聊 getClientRects 和 getBoundingClientRect 方法

    开始表演 今天来聊一下两个相似的方法,它们就是:getBoundingClientRect().getClientRects(). 只见它们俩手拉手地登上了舞台,一个鞠躬,便开始滔滔不绝起来. 自述 ...

  8. Java对于表达式中的自动类型提升

    1 表达式中的自动类型提升: 表达式求值时,Java自动的隐含的将每个byte.short或char操作数提升为int类型,这些类型的包装类型也是可以的. 例如: short s1 = 1; s1 = ...

  9. spring boot(15)-异常处理

    异常传递 如图:服务层和dao层的异常最终都会到达控制层,控制层的异常则会自动记入logback日志系统.所以我们应该在控制层来捕获系统异常 捕获控制层异常 import org.slf4j.Logg ...

  10. Python-Image 基本的图像处理操作

    Python-Image 基本的图像处理操作,有需要的朋友可以参考下. Python 里面最常用的图像操作库是 Image library(PIL),功能上,虽然还不能跟Matlab比较,但是还是比较 ...