zoukankan      html  css  js  c++  java
  • PHP学习笔记一:谁动了你的mail(),PHP?

    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号补正.进行在线转换


     
     IIS

    说句实话,这一步做的比较脑残,那上面是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 .打开邮件的内容,和我在页面输入的内容完全一致,而且有些内容还是从本地的数据库中读出来的。

  • 相关阅读:
    正经学C#_循环[do while,while,for]:[c#入门经典]
    Vs 控件错位 右侧资源管理器文件夹点击也不管用,显示异常
    asp.net core 获取当前请求的url
    在实体对象中访问导航属性里的属性值出现异常“There is already an open DataReader associated with this Command which must be
    用orchard core和asp.net core 3.0 快速搭建博客,解决iis 部署https无法登录后台问题
    System.Data.Entity.Core.EntityCommandExecution The data reader is incompatible with the specified
    初探Java设计模式3:行为型模式(策略,观察者等)
    MySQL教程77-CROSS JOIN 交叉连接
    MySQL教程76-HAVING 过滤分组
    MySQL教程75-使用GROUP BY分组查询
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/4517770.html
Copyright © 2011-2022 走看看