我一直在使用PHP mail()函数。

如果邮件由于任何原因未发送,我想回显错误消息。 我该怎么做?

就像是

$this_mail = mail('example@example.com', 'My Subject', $message);

if($this_mail) echo 'sent!';

else echo error_message;

谢谢!

当mail()返回false时,可以使用error_get_last()。

$success = mail('example@example.com', 'My Subject', $message);

if (!$success) {

$errorMessage = error_get_last()['message'];

}

使用print_r(error_get_last()),您将获得如下内容:

[type] => 2

[message] => mail(): Failed to connect to mailserver at"x.x.x.x" port 25, verify your"SMTP" and"smtp_port" setting in php.ini or use ini_set()

我认为这仅在使用SMTP(Windows?)时有效。在Linux上,如果您使用" sendmail",则" mail()"函数只会返回该命令的退出状态:github.com/php/php-src/blob/PHP-5.6.25/ext/standard/mail.c# L404没有可靠的方法来获取错误消息afaik。我尝试使用以下脚本:gist.github.com/njam/a34ecd9ef195c37c8354ab58f7bfcc9b

error_get_last()返回NULL !!但是mail函数返回true!

为什么它的答案如此流行,但为什么它没有引起人们的关注呢?我不知道人们会怎么完全想念它。

@ashleedawg-我什至不知道这怎么引起了这么多的投票。我从未见过-见过error_get_last()与phps本机mail()函数一起工作。实际上,我只是勉强设置了错误的邮件,然后再尝试一次以确保;我什么也没得到。

用php发送邮件不是一个一步的过程。 mail()返回true / false,但是即使返回true,也并不意味着将要发送消息。所有mail()所做的就是将消息添加到队列(使用sendmail或您在php.ini中设置的任何内容)

没有可靠的方法来检查消息是否已在php中发送。您将不得不查看邮件服务器日志。

您可以使用具有相同接口的PEAR邮件程序,但是在出现问题时返回PEAR_Error。

就我而言,无论我做什么(error_get_last()或ini_set('display_errors',1);),我都无法在我的PHP脚本中收到错误消息,也不显示错误消息

根据这篇文章

The return value from $mail refers only to whether or not your

server's mailing system accepted the message for delivery, and does

not and can not in any way know whether or not you are providing valid

arguments. For example, the return value would be false if sendmail

failed to load (e.g. if it wasn't installed properly), but would

return true if sendmail loaded properly but the recipient address

doesn't exist.

我确认这一点是因为在尝试在我的PHP脚本中使用mail()失败之后,结果发现我的计算机上未安装sendmail,但是php.ini变量sendmail_path为/usr/sbin/sendmail -t -i

1-我从软件包管理器shell> dnf install sendmail安装了sendmail

2-我开始了它shell> service sendmail start

3-现在,如果任何PHP mail()函数失败,我会发现/var/mail/目录下记录的sendmail程序错误。每个用户1个文件

例如,此片段摘自我的/var/mail/root文件

The original message was received at Sun, 29 Jul 2018 22:37:51 +0200

from localhost [127.0.0.1]

----- The following addresses had permanent fatal errors -----

(reason: 550 Host unknown)

我的系统是带有apache2.4和PHP 7.2的linux Fedora 28

没有与mail()函数关联的错误消息。关于是否接受电子邮件发送,仅返回true或false。不是最终决定是否交付,而是基本上域是否存在以及地址是否为有效格式的电子邮件地址。

$e=error_get_last();

if($e['message']!==''){

// An error function

}

error_get_last(); -返回上一次发生的错误

您应该在代码中添加一些解释,以免将来对他人有所帮助。如何回答

同意以前的评论。请修改您的答案以包含一些说明。纯代码的答案对教育未来的SO读者几乎没有作用。您的答案在质量不高的审核队列中。

尝试这个。如果我对任何文件有任何错误,那么我的电子邮件ID上会出现错误邮件。创建两个文件index.php和checkErrorEmail.php,并将它们上传到您的服务器。然后使用浏览器加载index.php。

的index.php

include('checkErrorEmail.php');

include('dereporting.php');

$temp;

echo 'hi '.$temp;

?>

checkErrorEmail.php

// Destinations

define("ADMIN_EMAIL","pradeep.callus7@hotmail.com");

//define("LOG_FILE","/my/home/errors.log");

// Destination types

define("DEST_EMAIL","1");

//define("DEST_LOGFILE","3");

/* Examples */

// Send an e-mail to the administrator

//error_log("Fix me!", DEST_EMAIL, ADMIN_EMAIL);

// Write the error to our log file

//error_log("Error", DEST_LOGFILE, LOG_FILE);

/**

* my_error_handler($errno, $errstr, $errfile, $errline)

*

* Author(s): thanosb, ddonahue

* Date: May 11, 2008

*

* custom error handler

*

* Parameters:

*  $errno:   Error level

*  $errstr:  Error message

*  $errfile: File in which the error was raised

*  $errline: Line at which the error occurred

*/

function my_error_handler($errno, $errstr, $errfile, $errline)

{

echo"errno".$errno.",errstr".$errstr.",errfile".$errfile.",errline".$errline;

if($errno)

{

error_log("Error: $errstr

error on line $errline in file $errfile

", DEST_EMAIL, ADMIN_EMAIL);

}

/*switch ($errno) {

case E_USER_ERROR:

// Send an e-mail to the administrator

error_log("Error: $errstr

Fatal error on line $errline in file $errfile

", DEST_EMAIL, ADMIN_EMAIL);

// Write the error to our log file

//error_log("Error: $errstr

Fatal error on line $errline in file $errfile

", DEST_LOGFILE, LOG_FILE);

break;

case E_USER_WARNING:

// Write the error to our log file

//error_log("Warning: $errstr

in $errfile on line $errline

", DEST_LOGFILE, LOG_FILE);

break;

case E_USER_NOTICE:

// Write the error to our log file

// error_log("Notice: $errstr

in $errfile on line $errline

", DEST_LOGFILE, LOG_FILE);

break;

default:

// Write the error to our log file

//error_log("Unknown error [#$errno]: $errstr

in $errfile on line $errline

", DEST_LOGFILE, LOG_FILE);

break;

}*/

// Don't execute PHP's internal error handler

return TRUE;

}

// Use set_error_handler() to tell PHP to use our method

$old_error_handler = set_error_handler("my_error_handler");

?>

什么是include(dereporting.php);?

正如其他人所说,发送邮件没有错误跟踪,它返回将邮件添加到传出队列的布尔结果。如果要跟踪真正的成功失败,请尝试将SMTP与邮件库(如Swift Mailer,Zend_Mail或phpmailer)一起使用。

php获取错误信息函数,关于php:如何获取mail()函数的错误消息?相关推荐

  1. linux获取进程信息函数

    Linux进程的管理 <一>获取进程信息函数 进程又称任务,是一个动态的使用系统资源.处于活动状态的应用程序. 进程的管理由进程控制块PCB.进程调度.中断管理.任务队列等组成,它是lin ...

  2. f_GetErrorInfo()获取系统错误信息函数

    /* ======================================================= */ // 名称:f_GetErrorInfo() // 中文名称:(数据获取)获 ...

  3. linux用函数输出进程信息,Linux进程的管理 获取进程信息函数

    进程又称任务,是一个动态的使用系统资源.处于活动状态的应用程序. 进程的管理由进程控制块PCB.进程调度.中断管理.任务队列等组成,它是linux文件系统.存储管理.设备管理和驱动程序的基础. 进程控 ...

  4. android 获取位置数据库,尝试从webview获取位置时,Android“SQLite数据库无法从/CachedGeoposition.db加载”错误...

    我正在创建一个使用webkit和chrome客户端的android应用程序.我希望能够在网页请求时获取当前位置.我设置的网页适用于普通浏览器就好了.然而,当我尝试访问该网页WebKit中,我不断收到此 ...

  5. poi获取有效单元格个数_EXCEL利用SUM函数和FREQUENCY函数数组公式统计不同区间数据个数...

    EXCEL函数公式大全之利用FREQUENCY函数数组公式统计不同区间数据个数.EXCEL函数与公式在工作中使用非常的频繁,会不会使用公式直接决定了我们的工作效率,今天我们来学习一下提高我们工作效率的 ...

  6. php 获取最后执行的sql,如何获取ThinkPHP框架最后一次执行SQL语句及变量调试

    这篇文章主要介绍了ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作,结合实例形式分析了thinkPHP获取最后一次执行SQL语句的getLastSql()及fetchSql()函数以及 ...

  7. Nodejs获取MySQL数据_nodejs同步调用获取mysql数据时遇到的大坑

    mysql调用获取数据,只能是异步方式返回结果,不能同步获取结果,因此,须在回调函数中编写处理事件.期间看了下Aysnc.js,是用于多个要返回回调函数的事件,将这些事件有序的组织起来,最后只返回一个 ...

  8. 无法从服务器中获取信息吗,无法从服务器获取信息

    无法从服务器获取信息 内容精选 换一换 查询配额信息.GET /v2/{project_id}/os-quota-sets/{project_id}参数说明参数是否必选参数类型描述project_id ...

  9. vue项目获取下拉框选中id_vue获取下拉框值

    vue获取下拉框的值,用vue-modle,只有点击下拉框的值才会赋值到下拉框中,初始时下拉框没有数据,而改用$event就不会出现这样的问题,下面看代码以及图解: v-model解决方式: {{it ...

最新文章

  1. 京东《未来科技趋势白皮书》,101页pdf
  2. java丑数算法_LintCode Java算法练习(4)-----丑数II
  3. 系统建设或应用提供的目标或愿景性场景
  4. .Net IOC框架入门之三 Autofac
  5. JavaScript Iframe富文本编辑器中的光标定位
  6. Android笔记 simpleAdapter demo
  7. php方法重载方法重写_PHP面向对象之旅:方法覆盖
  8. 线性表_双向循环链表(Caesar加密变换结点顺序 代码实现 )
  9. U盘安装WIN10移动系统
  10. 各地级市系列环境指标数据(2003-2017年)
  11. 关于Froala Editor的简单使用
  12. 跟我学Springboot开发后端管理系统1:概述
  13. 华为网络设备查看设备温度状态检查命令方法
  14. 本世纪惊心动魄的粮食战争,中国反败为胜:陈思进--20190701
  15. 天使之火Angelfire:CIA入侵Windows系统的恶意软件
  16. Android逆向分析案例——某点评APP登陆请求数据解密
  17. 四级语法4——定语从句
  18. python前端——HTML超文本标记语言、CSS层叠样式表
  19. Python动画制作:90秒倒计时圆形进度条效果
  20. word计算机桌面加密,word文档加密,怎么让word自动加密 -电脑资料

热门文章

  1. 判断一段文件是UTF-8编码还是GB2312的编码方式
  2. C语言中的struct和union区别
  3. 【算法】学习笔记(0):算法初探(逻辑抽象 + 示例 + 代码实现)
  4. 意外收获字节跳动内部资料,已开源
  5. Spring主要用到两种设计模式
  6. Ansible-----循环
  7. linux—命令汇总
  8. HTTP 协议 -- 浏览器缓存机制
  9. Android用Intent和Bundle传list
  10. 关于shiro session失效报错问题