php脚本中利用mail函数发送邮件及问题归纳

2023-11-15

       最近在学php脚本语言,书中有一个实例:服务器端将浏览器发送的信息通过php脚本,利用mail函数发送到一个邮箱。自己讲书中实例代码上传至服务器,在浏览器上填写表单,并提交后,邮箱迟迟收不到邮件。

1、php中mail函数发送邮件失败问题

       邮箱收不到邮件是因为mail函数发送邮件失败了。php中mail函数是一个自带的发邮件的函数,但是如果你真的要使用 mail函数来发邮件那必须是要给你系统安装sendmail组件才可以。
      先使用以下命令检查是否已安装sendmail:     rpm –q sendmail
      检测结果确实未安装该组件,果断安装:        yum install sendmail
      安装完成之后还要去检查了下php.ini配置,里面需要修改相关参数,找到php.ini文件并用vim打开,找到sendmail_path 所在行。发现是未启用,去掉前面的分号";",并将其改为:
                                              sendmail_path = /usr/sbin/sendmail -t –i
有的系统可能默认是sendmail_path = /usr/sbin/sendmail -t -i -f,这个-f 看来是让mail函数停用了,去掉-f后mail函数工作恢复正常。
       然后重启sendmail:service sendmail restart
       重新测试php脚本,发现现在可以正常发送邮件了,但是有一个新的问题:发送邮件很慢。

2、sendmail发送邮件很慢的问题

       从网上搜索本问题,会搜出一大堆的解决方案来,大致思路如下:
       查看错误日志,cat /var/log/maillog,发现这么一段日志:
       大致意思是:sendmail无法确认主机名。此时可以输入如下命令: cat /etc/hosts      内容如下:
127.0.0.1 localhost
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
10.144.163.27 iZ28koenlrmZ
       因为iZ28koenlrmZ这个主机名是属于10.144.163.27的,但同时,也是属于127.0.0.1的,而在这个hosts文件里,127.0.0.1是不拥有这个主机名。但通过查看服务器服务监听情况,输入命令 netstat -anpo | grep sendmail
发现sendmail监听的是127.0.0.1,但却无法确认主机名iZ28koenlrmZ(因为在服务器上/etc/sysconfig/network文件里记录的HOSTNAME是 iZ28koenlrmZ ),所以发送邮件就非常慢了。
       所以,需要把iZ28koenlrmZ这个主机名同时也加到127.0.0.1上面,然后重启sendmail。
       哈哈!也许这就是网上众多解决方案中的一部分吧。。。,但是,问题好像并没有解决,发送有时候还是很慢呀!而且启动sendmail也很慢。。。 好吧,又开始一轮新的搜索资料,嘿嘿!网上又说了终极解决方案如下:
        sendmail和sm-client都是MTA,只认网络主机名,即在主机名后面加上.localdomain(或者直接写成网站域名,如admin.slyar.com这样的),而我之前那篇文章直接添加iZ28koenlrmZ,不符合网络主机名规范,所以启动速度慢。因此需要修改两处,一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改一处是不够的。
         /etc/hosts                          将127.0.0.1所处的行改为:127.0.0.1 主机名.localdomain localhost
其中127.0.0.1 是本地环路地址,主机名.localdomain 是主机名(hostname),也就是要修改的。localhost 是主机名的别名(alias),它会出现在Konsole的提示符下。
        /etc/sysconfig/network        将HOSTNAME=localhost.localdomain (如果是默认的话),修改为你的主机名。
        以上两个文件只有系统重启后才能生效,若不想重启,可直接用命令:hostname 主机名,即可临时更改主机名。 好了,这下可以重启sendmail了,发现果然变快了。   
注:以上方法同样可以解决(1)centos 启动时候的sendmail 、sm-client等待长久;(2)sendmail 报错
当然,解决上述问题的方法也可以放弃使用sendmail,利用 Postfix 替换 sendmail 组件,因为据说 Postfix 的效率更高些。具体设置可参考:http://www.cmhello.com/lnmp-centos-postfix.html
题注:以上内容参考网上资料进行整理而成,如有错误,敬请指正,谢谢!!!
      
http://free.yes81.net/yes81/view-10954.html                                                 
http://iwww.me/74.html
http://www.ailab.cn/article/2015082029540.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

php脚本中利用mail函数发送邮件及问题归纳 的相关文章

  • C/C++ with GCC:静态地将资源文件添加到可执行文件/库

    有人知道如何使用 GCC 将任何资源文件静态编译为可执行文件或共享库文件吗 例如 我想添加永远不会改变的图像文件 如果它们改变了 我无论如何都必须替换该文件 并且不希望它们位于文件系统中 如果这是可能的 我认为这是因为 Visual C f
  • 尝试编译 git 但在 linux 中找不到 libcurl

    我想编译支持 http https 的 git 我有 ls usr include curl curlbuild h curl h curlrules h curlver h easy h mprintf h multi h stdchea
  • BlueZ D-Bus C,应用 BLE

    我正在尝试编写一个应用程序来搜索附近的蓝牙设备并与它们通信 我的应用程序将用 C 语言编写 并打算在 Linux 下工作 是否有通过 C 中的 D Bus 使用 BlueZ 的教程或示例 此应用程序的目的是从 BLE 中的文件发送数据 你能
  • mod_perl 无法看到 /tmp 中的文件

    我有一些 mod perl 代码试图访问 tmp 下的文件 但它抛出 没有这样的文件或目录 错误 我在代码中添加了一个 ls al tmp 来查看 Perl 在目录中看到的内容 它只给了我 和 drwxrwxrwt 2 root root
  • C 标准库函数与系统调用。哪个是“open()”?

    I know fopen 在C标准库中 所以我绝对可以调用fopen C 程序中的函数 我感到困惑的是为什么我可以打电话给open 功能也一样 open 应该是系统调用 所以它不是标准库中的C函数 因为我能够成功地调用open 函数 我调用
  • 如何将字符串推送到标准输入?在启动时通过 stdin 提供输入,然后以交互方式读取 stdin 输入 [重复]

    这个问题在这里已经有答案了 有没有办法在调用程序时将字符串 推送 到程序的标准输入流 这样我们就可以达到这样的效果 echo something my program 但不是在之后读取 EOF something my program将从原
  • 如何搭建qtwayland?

    我花了一整天的时间尝试使用QtWayland Compositor 1 0在 Qt 创建者中 我已经遵循了从那里开始的所有步骤https wiki qt io QtWayland https wiki qt io QtWayland但我收到
  • Mongo:无法连接到服务器 127.0.0.1:27017 位于 src/mongo/shell/mongo.js:145

    当我尝试在 ubuntu 中的 shell 中运行 mongo 或打开 rockmongo 时 我看到以下错误 couldn t connect to server 127 0 0 1 27017 at src mongo shell mo
  • Git - 致命:无法获取当前工作目录?

    When I git clone从回购协议中 我得到 fatal Could not get current working directory No such file or directory 我该怎么办 我检查了服务器并发现 git文
  • Bash 脚本错误 [重复]

    这个问题在这里已经有答案了 我想知道下面的脚本有什么错误 我收到错误为 command not foundh line 1 command not foundh line 2 其连续的 我试过添加 但现在工作请告诉我该怎么做 bin bas
  • 多线程进程的线程ID可以与另一个正在运行的进程的进程ID相同吗?

    我正在尝试找到一种方法来唯一标识多进程环境中的线程 我有一个服务器 它跟踪连接到它的不同进程 其中一些是多线程的 一些不是 为了识别多线程连接中的线程 我使用线程 ID 作为唯一标识符 在任何给定时间最多有 1 个多线程进程连接 我的问题是
  • 如何使用 bash 粘贴来自单独文件的列?

    我想用分隔符 合并不同的列表 第一个列表有 2 个单词 cat first one who 第二个列表有 10000 个单词 cat second languages more simple advanced home expert tes
  • 如何像C99一样使用make和编译?

    我正在尝试使用 Makefile 编译 Linux 内核模块 obj m main o all make C lib modules shell uname r build M PWD modules clean make C lib mo
  • 如何在 .zip 文件中使用 grep

    有 3 个文件 a csv b csv c csv 压缩为 abh zip 现在可以在 abh zip 上执行 grep 命令 是否有任何通配符 仅对里面的 c csv 文件运行 grep压缩 如果你有zipgrep 据我所知 它是随zip
  • /proc/kmsg 和 dmsg 有什么区别?

    我们通常这样做cat proc kmsg or dmesg从用户空间查看内核日志 我明白了dmesg是一个循环缓冲区 它从kmsg 但是kmsg也不是循环缓冲区 它们之间有什么区别和联系呢 宽松地说 dmesg 是一个转储 proc kms
  • 使用多个 NIC 广播 UDP 数据包

    我正在 Linux 中为相机控制器构建嵌入式系统 非实时 我在让网络做我想做的事情时遇到问题 该系统有 3 个 NIC 1 个 100base T 和 2 个千兆端口 我将较慢的连接到相机 这就是它支持的全部 而较快的连接是与其他机器的点对
  • C:运行系统命令并获取输出? [复制]

    这个问题在这里已经有答案了 我想在 Linux 中运行一个命令并获取其输出内容的返回文本 但我do not想要将此文本打印到屏幕上 有没有比制作临时文件更优雅的方法 你想要 popen http linux die net man 3 po
  • 将 file.lib 构建为可在 linux 上使用的 file.a

    我正在尝试将 api 从 Windows 移植到 Linux 到目前为止 我已经完成了 file cpp 和 file h 的工作 但我仍然有一个指定给 Windows 的库 lib 这是 api 工作所必需的 我怎样才能从这个库构建一个可
  • 如何在 arago 项目构建中编写自己的食谱包

    我如何在 arago 项目构建中编写自己的食谱包 我知道它可以是 bitbake 文件 但我怎么写 不知道 我在互联网上搜索 但未能找到任何好的来源 有人可以给我提供链接或示例来开始吗 RegardsLinux 学习者 使用 Bitbake
  • Linux 内核中是否使用了扩展指令集(SSE、MMX)?

    好吧 它们带来 至少应该带来 性能的巨大提升 不是吗 所以 我还没有看到任何 Linux 内核源代码 但很想问 它们是否以某种方式被使用 在这种情况下 对于没有此类指令的系统 必须有一些特殊的 代码上限 SSE 和 MMX 指令集在音频 视

随机推荐