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函数发送邮件及问题归纳 的相关文章

  • 用另一个文件的标签为图表(ggplot2)中的标题添加下标

    在我的程序中 我有两个主要文件 第一个包含数据 第二个包含标签 或图形标题 文件总数1 数据 3 10000 3 32039232 1 0 0017290351 2 0 0002781092 3 10001 3 32101193 1 0 0
  • 内核驱动程序从用户空间读取正常,但写回始终为 0

    因此 我正在努力完成内核驱动程序编程 目前我正在尝试在应用程序和内核驱动程序之间构建简单的数据传输 我使用简单的字符设备作为这两者之间的链接 并且我已成功将数据传输到驱动程序 但我无法将有意义的数据返回到用户空间 内核驱动程序如下所示 in
  • 如果文件没有行尾字符,则 wc -l 不计算文件的最后一个

    我需要计算 unix 文件的所有行数 该文件有 3 行 但是wc l仅给出 2 个计数 我知道它不计算最后一行 因为它没有行尾字符 任何人都可以告诉我如何计算这一行吗 grep c返回匹配行的数量 只需使用一个空字符串 作为您的匹配表达式
  • Bash:检查是否给出了参数(例如是否有参数“-a”?)

    我有一个脚本 它应该接受 2 个参数 s 和 d 如果未给出 d 参数 我想删除我的调试文件 与 s 相同 如何检查 1 或 2 是否为 s 或 d 舒尔有两个参数 我可以做到 蛮力 if test 1 d test 2 d then rm
  • Pthreads - 高内存使用率

    我正在用 C 编写一些东西 在 256Mb 系统上的 Linux 中创建大量 Pthread 我通常有 200Mb 的免费空间 当我使用少量线程运行该程序时 它可以工作 但是一旦我让它创建大约 100 个线程 它就会出现错误 因为系统内存不
  • 如何通过ssh获取远程命令的退出代码

    我正在通过 ssh 从远程计算机运行脚本 ssh some cmd my script 现在 我想在本地计算机上存储 shell 脚本的退出状态 我该怎么做 假设没有任何问题ssh其本身 其退出状态是在远程主机上执行的最后一个命令的退出状态
  • 如何在Linux上用C/C++编写Web服务器[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我正在考虑在 Linux 平台上开发一个小型 阅读 初级 Web 服务器 但我不知道从哪里开始 我希望它能够做的是 监听特定端口 接受
  • 如何将一个文本文件拆分为多个 *.txt 文件?

    我有一个文本文件file txt 12 MB 包含 something1 something2 something3 something4 有没有办法分开file txt分成 12 个 txt 文件 比方说file2 txt file3 t
  • 使用 shell 脚本发送 HTML 邮件

    如何使用 shell 脚本发送 HTML 电子邮件 首先 您需要撰写消息 最低限度由这两个标头组成 MIME Version 1 0 Content Type text html 以及适当的消息正文 p Hello world p 获得后
  • 如何在C(Linux utf8终端)中打印“盒子抽屉”Unicode字符?

    我正在尝试显示 方框图范围 2500 257F 中的 Unicode 字符 它应该是标准 utf8 Unicode 标准 版本 6 2 我根本做不到 我首先尝试使用旧的 ASCII 字符 但 Linux 终端以 utf8 显示 并且没有显示
  • Docker忽略limits.conf(试图解决“打开文件太多”错误)

    我正在运行一个 Web 服务器 该服务器正在处理数千个并发 Web 套接字连接 为了实现这一点 在 Debian linux 我的基本镜像是 google debian wheezy 在 GCE 上运行 上 打开文件的默认数量设置为 100
  • Linux shell 从用户输入中获取设备 ID

    我正在为一个程序编写安装脚本 该程序需要在其配置中使用 lsusb 的设备 ID 因此我正在考虑执行以下操作 usblist lsusb put the list into a array for each line use the arr
  • 使用 libusb 输出不正确

    我用libusb编写了一个程序 我怀疑输出是否正确 因为所有条目都显示相同的供应商和产品 ID 以下是代码 include
  • LINUX:如何锁定内存中进程的页面

    我有一个 LINUX 服务器 运行一个具有大量内存占用的进程 某种数据库引擎 该进程分配的内存太大 需要将其中一部分换出 换出 我想做的是将所有其他进程 或正在运行的进程的子集 的内存页面锁定在内存中 以便只有数据库进程的页面被换出 例如
  • 如何在线程创建和退出时调用函数?

    include
  • 在 docker 中重定向命令输出

    我想为我的服务器做一些简单的日志记录 它是一个在 Docker 容器中运行的小型 Flask 应用程序 这是 Dockerfile Dockerfile FROM dreen flask MAINTAINER dreen WORKDIR s
  • Tomcat Intellij Idea:远程部署

    RackSpace 云服务器 Ubuntu 12 04 Intellij Idea 11 1 2 Windows 8 Tomcat 7 0 26 JDK 6 在 Intellij Idea 上 当我尝试在远程 Tomcat 7 服务器上运行
  • vmsplice() 和 TCP

    在原来的vmsplice 执行 有人建议 http lwn net Articles 181169 如果您的用户态缓冲区是管道中可容纳的最大页面数的 2 倍 则缓冲区后半部分成功的 vmsplice 将保证内核使用缓冲区的前半部分完成 但事
  • 为什么 Linux 原始套接字的 RX 环大小限制为 4GB?

    背景 我试图mmap 我的原始套接字的 RX 环形缓冲区64 bitLinux 应用程序 我的环由 4096 个块组成 每个块大小为 1MB 总共 4GB 请注意 每个 1MB 块中可以有许多帧 如果您好奇 请参阅此文档了解背景信息 htt
  • 仅使用containerd(不使用Docker)修剪容器镜像

    如果我刚刚containerd安装在 Linux 系统上 即 Docker 是not安装 如何删除未使用的容器映像以节省磁盘空间 Docker 就是这么方便docker system prune https docs docker com

随机推荐