mail () 함수에 대한 오류 메시지를 어떻게 얻을 수 있습니까?
저는 PHP mail()
기능을 사용하고 있습니다.
어떤 이유로 든 메일이 전송되지 않으면 오류 메시지를 반향하고 싶습니다. 어떻게할까요?
같은 것
$this_mail = mail('example@example.com', 'My Subject', $message);
if($this_mail) echo 'sent!';
else echo error_message;
감사!
false를 반환 error_get_last()
할 때 사용할 수 있습니다 mail()
.
$success = mail('example@example.com', 'My Subject', $message);
if (!$success) {
$errorMessage = error_get_last()['message'];
}
을 사용 print_r(error_get_last())
하면 다음과 같은 결과를 얻을 수 있습니다.
[type] => 2
[message] => mail () : "xxxx"포트 25에서 메일 서버에 연결하지 못했습니다. php.ini에서 "SMTP"및 "smtp_port"설정을 확인하거나 ini_set () 사용
[파일] = > C : \ www \ X \ X.php
[줄] => 2
PHP로 메일을 보내는 것은 한 단계의 과정이 아닙니다. mail ()은 true / false를 반환하지만 true를 반환하더라도 메시지가 전송된다는 의미는 아닙니다. 모든 mail ()은 메시지를 큐에 추가하는 것입니다 (sendmail 또는 php.ini에서 설정 한 모든 것을 사용)
메시지가 PHP로 전송되었는지 확인할 수있는 신뢰할 수있는 방법이 없습니다. 메일 서버 로그를 살펴 봐야합니다.
인터페이스는 동일하지만 문제가있을 경우 PEAR_Error를 반환하는 PEAR 메일러를 사용할 수 있습니다 .
mail()
함수 와 관련된 오류 메시지가 없습니다 . 이메일이 배달을 위해 수락되었는지 여부에 대한 true
또는 false
반환 만 있습니다 . 궁극적으로 전달되는지 여부가 아니라 기본적으로 도메인이 존재하고 주소가 유효한 형식의 이메일 주소인지 여부입니다.
제 경우에는 내가 무엇을하든 ( error_get_last()
, 또는 ini_set('display_errors',1);
) 오류 메시지를 표시하지 않더라도 PHP 스크립트에서 오류 메시지를 얻을 수 없습니다.
이 게시물 에 따르면
$ mail의 반환 값은 서버의 메일 링 시스템이 메시지 전달을 수락했는지 여부만을 나타내며 유효한 인수를 제공하는지 여부를 알 수 없으며 알 수 없습니다. 예를 들어, sendmail이 제대로 설치되지 않은 경우 (예 : 제대로 설치되지 않은 경우) 반환 값은 false가되지만 sendmail이 제대로로드되었지만받는 사람 주소가 존재하지 않으면 true를 반환합니다.
mail()
내 PHP 스크립트에서 사용하려는 시도가 실패한 후 sendmail
내 컴퓨터에 설치되지 않았지만 php.ini 변수 sendmail_path
는/usr/sbin/sendmail -t -i
1- 패키지 관리자에서 sendmail을 설치했습니다. shell> dnf install sendmail
2- 나는 그것을 시작했다 shell> service sendmail start
3- 이제 PHP mail()
기능이 실패하면 디렉토리에 sendmail
기록 된 프로그램 의 오류를 찾습니다 /var/mail/
. 사용자 당 파일 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 -----
<no-one@errorerrorerrorerror51248562221e542.com>
(reason: 550 Host unknown)
내 시스템은 apache2.4 및 PHP 7.2가 설치된 Linux Fedora 28입니다.
다른 사람들이 말했듯이, 보내는 메일에 대한 오류 추적은 없으며 보내는 대기열에 메일을 추가 한 부울 결과를 반환합니다. 진정한 성공 실패를 추적하려면 Swift Mailer, Zend_Mail 또는 phpmailer와 같은 메일 라이브러리와 함께 SMTP를 사용해보십시오.
$e=error_get_last();
if($e['message']!==''){
// An error function
}
error_get_last (); -발생한 마지막 오류를 반환
이 시도. 파일에 오류가 있으면 내 이메일 ID에 오류 메일이 있습니다. 두 개의 파일을 index.php
만들고 checkErrorEmail.php
서버에 업로드합니다. 그런 다음 index.php
브라우저로 로드 하십시오.
Index.php
<?php
include('checkErrorEmail.php');
include('dereporting.php');
$temp;
echo 'hi '.$temp;
?>
checkErrorEmail.php
<?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 "<br><br><br><br>errno ".$errno.",<br>errstr ".$errstr.",<br>errfile ".$errfile.",<br>errline ".$errline;
if($errno)
{
error_log("Error: $errstr \n error on line $errline in file $errfile \n", DEST_EMAIL, ADMIN_EMAIL);
}
/*switch ($errno) {
case E_USER_ERROR:
// Send an e-mail to the administrator
error_log("Error: $errstr \n Fatal error on line $errline in file $errfile \n", DEST_EMAIL, ADMIN_EMAIL);
// Write the error to our log file
//error_log("Error: $errstr \n Fatal error on line $errline in file $errfile \n", DEST_LOGFILE, LOG_FILE);
break;
case E_USER_WARNING:
// Write the error to our log file
//error_log("Warning: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE);
break;
case E_USER_NOTICE:
// Write the error to our log file
// error_log("Notice: $errstr \n in $errfile on line $errline \n", DEST_LOGFILE, LOG_FILE);
break;
default:
// Write the error to our log file
//error_log("Unknown error [#$errno]: $errstr \n in $errfile on line $errline \n", 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");
?>
참고 URL : https://stackoverflow.com/questions/3186725/how-can-i-get-the-error-message-for-the-mail-function
'Development Tip' 카테고리의 다른 글
Angular JS의 행에 대체 클래스를 할당하는 방법은 무엇입니까? (0) | 2020.10.29 |
---|---|
Gulp로 여러 파일을 복사하고 폴더 구조를 유지하는 방법 (0) | 2020.10.29 |
파이썬에서 numpy.linalg.eig를 사용한 후 고유 값 및 관련 고유 벡터 정렬 (0) | 2020.10.29 |
DOM 객체에 속성을 설정할 때 매개 변수 재 할당을 방지하는 방법 (0) | 2020.10.28 |
ESLint 달러 ($)가 정의되지 않았습니다. (0) | 2020.10.28 |