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 .打开邮件的内容,和我在页面输入的内容完全一致,而且有些内容还是从本地的数据库中读出来的。

  • 相关阅读:
    nginx 指定多个域名跨域请求配置 find ./ ! -path "./node_modules/*" -name *.js |xargs egrep basePath
    所以 if a 代表如果a有值的时候执行的内容,有值才能执行是True if not a 代表 a无值是空的时候执行的内容 not False 是True才能执行 代表空值的时候执行
    python 逻辑运算符
    git的突出解决--git rebase之abort、continue、skip
    chromium source get
    How JavaScript works in browser and node?
    chromium windows compile 浏览器编译 vs2017 win10
    Git Reset 三种模式
    webkit js
    用electron自己的nodejs写的depot_tools 工具下载 构建源码
  • 原文地址:https://www.cnblogs.com/xuan52rock/p/4517770.html
Copyright © 2011-2022 走看看