在配置了lnmp环境后,出现了mail函数不能发送邮件的问题,其实有两种方法,一是使用sendmail组件,而是使用postfix。

方法一,使用sendmail组件来发邮件 
  1.安装 sendmail 组件 
  yum install sendmail 
  2.使用下面的命令重启php-fpm进程 
  /etc/init.d/php-fpm restart 
  3.检测sendmail是否运行正常 
  /etc/init.d/sendmail status 
  如果显示正在运行running 就可以。 
  可能用到的命令 
  /etc/init.d/sendmail start (启动sendmail) 
  /etc/init.d/sendmail stop (关闭sendmail) 
  /etc/init.d/sendmail restart (重启sendmail) 
  4.配置php.ini,填写sendmail的绝对路径 
  使用命令打开编辑php.ini 
  vi /usr/local/php/etc/php.ini 
  输入?sendmail_path 查找定位(或者手动跳转找到sendmail_path),你会发现默认是下面的代码 
  ;sendmail_path = 
  按 i 进入编辑,将这行修改为 
  sendmail_path = /usr/sbin/sendmail -t –i 
  按 Esc 键退出编辑,输入 :wq 保存退出 
  5.重启php-fpm进程 
  /etc/init.d/php-fpm restart 
  这样就成功了,如果不放心,新建一个php文件,命名为 mail.php ,可以使用下面代码测试下。 
  《?php 
  txt=“hello,youareagoodboy!”;  //以下的邮箱地址改成你的txt=“hello,youareagoodboy!”;  //以下的邮箱地址改成你的mail = ‘somebody@example.com’; 
  // 发送邮件 
  mail(mail,“Mysubject”,mail,“Mysubject”,txt); 
  echo ‘message was sent!’; 
  ?》 
  保存并上传至你的网站根目录,并在浏览器运行: 
  http://你的网址/mail.php 
  到时候你的邮箱就应该能收到邮件了,不过基本都在垃圾邮件里面,注意查看,如果收不到邮件的话,检查在操作过程时候正常,有木有重启sendmail或者重启php。一般来说,就能正常收到邮件了。 
  当然,功能是实现了,不过用上面的测试代码测试的时候,发现成功发一封邮件很慢很慢,要好几十秒甚至一分钟的时候。然后我在博客中发表或者回复评论的也是异常的慢,超过了用户等待的心理期限。优化这个效率势在必行了,不然只能砍掉这个功能。 
  网上方法很多很多,修改这个文件又是修改那个文件,感觉比较麻烦,于是找个了操作最少的修改,然后成功了。 
  修改/etc/hosts ,未修改之前 
  127.0.0.1 localhost.localdomain localhost 
  修改成 
  127.0.0.1 localhost.localdomain localhost 主机名称 
  查看本机的主机名称的命令是: hostname 
  完成修改之后重启下sendmail 
  service sendmail restart 
  方法二,如果不用sendmail可以尝试使用postfix发邮件 
  自从安装lnmp环境后,lnmp下mail函数不能发送邮件的问题依然是出现的,在这里,我不建议大家使用sendmail作为发信,理由就是效率低,速度慢。 
  yum remove sendmail 
  然后就开始安装Postfix了,这相对与sendmail要效率高很多,发信速度快,占用内存低,可以说是目前服务器发信首选,当然也有很多大神会说smtp也不错,那也没错,但个人爱好,我就喜欢服务器发信的简单! 
  安装 Postfix 
  yum install postfix 
  更改默认MTA为Postfix: 
  /usr/sbin/alternatives –set mta /usr/sbin/sendmail.postfix 
  完事儿,再次检查下是否将MTA改为Postfix了: 
  alternatives –display mta 
  配置Postfix,vi编辑main.cf 
  vi /etc/postfix/main.cf 
  打开后分别找到以下几项,将其前面的#去掉,并做配置: 
  myhostname = mail.2zzt.com 
  mydomain = 2zzt.com 
  myorigin = mydomain  inetinterfaces=all  mydestination=mydomain  inetinterfaces=all  mydestination=myhostname, localhost.mydomain,localhost,mydomain,localhost,mydomain 
  mynetworks = 192.168.100.10/28, 127.0.0.0/8 
  relay_domains = 
  home_mailbox = Maildir/ 
  不喜欢vi在线编辑的,可以直接下载main.cf上传到服务器的/etc/postfix/main.cf进行替换吧 
  检测并启动Postfix 
  service postfix status 
  //若未启动,执行以下命令: 
  service postfix start 
  设置开机启动 
  chkconfig postfix on 
  到这一步Postfix算是OK了,但我们还是得到php.in里配置下sendmail的绝对路径! 
  使用命令打开编辑php.ini 
  vi /usr/local/php/etc/php.ini 
  输入?sendmail_path 查找定位(或者手动跳转找到sendmail_path),你会发现默认是下面的代码 
  ;sendmail_path = 
  按 i 进入编辑,将这行修改为 
  sendmail_path = /usr/sbin/sendmail -t -i 
  按 Esc 键退出编辑,输入 :wq 保存退出 
  重启php-fpm进程 
  /etc/init.d/php-fpm restart 
  Linux lnmp下mail函数无法发送邮件的解决方法就介绍到这里了,因为sendmail效率低,比较浪费时间,这里推荐使用postfix发送邮件

linux lnmp下无法使用mail发邮件的两种解决方法的更多相关文章

  1. 在linux环境下编译运行OpenCV程序的两种方法

    原来以为在Ubuntu下安装好了OpenCV之后,自己写个简单的程序应该很容易吧,但是呢,就是为了编译一个简单的显示图片的程序我都快被弄崩溃了. 在谷歌和上StackOverFlow查看相关问题解答之 ...

  2. URL传递中文参数,大坑一枚,Windows与Linux效果竟然不一致(两种解决方法)

    下午,计划2个小时搞定,个人官网第6次升级,就可以干点轻松的事了,结果,下午多搞了2个小时,晚上又搞了2个小时,才搞定. 最后一个世界难题是,URL传递中文参数. 问题大致是这么出现的:我为" ...

  3. AttributeError: module 'yagmail' has no attribute 'SMTP',关于使用yagmail发邮件报错的解决方法

    想用yagmail,发送自动化测试结果邮件,发现运行的时候报错.最后发现是自己的脚本名称用的yagmail.py,更改成另一个就好,换了my_yagmail.py 再运行OK啦!!!!

  4. Linux遗忘root密码的其中两种解决方法

    由于安全的需要,系统一般只有一个root用户,因此若遗忘root用户的登录密码,因此需要通过其他途径进行修改密码.1.通过单用户模式(1)重启系统,按任意键进入grub菜单.出现grub菜单时,按↑, ...

  5. Thinkphp 无法使用->order() 排序的两种解决的方法!

    使用ThinkPHP,却发现无法使用->order($order)来排序. $order = " info.date2 desc "; 非常遗憾的是这样写结果order却变成 ...

  6. 【Linux】wget: command not found的两种解决方法

    1.rpm 安装 下载wget的RPM包: http://mirrors.163.com/centos/6.8/os/x86_64/Packages/wget-1.12-8.el6.x86_64.rp ...

  7. 【配置】检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为【经典】模式)。

      ×   检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(非简单设置为[经典]模式). 我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 5 ...

  8. 检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(转)

    我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.N ...

  9. (转)检测到在集成的托管管道模式下不适用的ASP.NET设置的解决方法(转)

    我们将ASP.NET程序从IIS6移植到IIS7,可能运行提示以下错误: HTTP 错误 500.23 - Internal Server Error 检测到在集成的托管管道模式下不适用的 ASP.N ...

随机推荐

  1. 洛谷P1991 无线通讯网【最小生成树】

    题目:https://www.luogu.org/problemnew/show/P1991 题意:有p个点的坐标,可以有s个点使得这s个点之间可以无限制通信. 要使所有点之间两两有通信的路径(可以是 ...

  2. SQL切分字符串成int和for xml path

    切分字符 SqlServer切割字符串示例: --declare @StrDId nvarchar(2000) --set @StrDId='100,200,400,500,600' --转换ID,防 ...

  3. myeclipse2018大括号之前会自动加空格

  4. oracle存储过程把查询到的值更新到别的表

    create or replace procedure update_nst_t_Clime2 as cursor c_db is select * from NST_T_FRAME f ,) as ...

  5. JDK8中好用的日期处理-LocalDate类-LocalTime-LocalDateTIme,mysql解决时区相差13小时的问题,日期格式器DateTimeFormatter

    set global time_zone='+08:00'; set time_zone = '+08:00'; show variables like '%time_zone:'

  6. 《论文翻译》Xception

    目录 深度可分离网络-Xception 注释 1. 摘要 2. 介绍 3. Inception假设 4. 卷积和分离卷积之间的联系 4. 先验工作 5. Xception 架构 6. 个人理解 单词汇 ...

  7. kubectl 日常命令 备忘

    目录 kubectl 常用命令 自动补全 Kubectl命令概览 常用命令分类 常用命令 声明式资源对象管理 查看资源状态 容器管理 集群管理 常用命令英文缩写 kubectl 常用命令 自动补全 使 ...

  8. int(“1.6”),int(1.6)输出结果?

    >>> int("1.6") Traceback (most recent call last): File , in <module> ValueE ...

  9. cesium地下模式(地表透明)4

    这篇博客主要罗列一下解决地下模式(地表透明)的相关资源 1.Cesium的Github仓库地下模式issue 有人提了这个问题,但是cesium官方没有解决这个问题,持续跟踪一下问题说不定哪天官方就解 ...

  10. java继承内存分配

    java继承内存分配 继承的基本概念: * Java不支持多继承,也就是说子类至多只能有一个父类. * 子类继承了其父类中不是私有的成员变量和成员方法,作为自己的成员变量和方法. * 子类中定义的成员 ...