mail() 함수에 대한 오류 메시지를 받으려면 어떻게 해야 합니까?
PHP를 사용하고 있습니다.mail()
기능.
어떤 이유로든 메일이 발송되지 않으면 에러 메시지를 에코하고 싶습니다.내가 그걸 어떻게 하겠어?
뭐랄까
$this_mail = mail('example@example.com', 'My Subject', $message);
if($this_mail) echo 'sent!';
else echo error_message;
감사합니다!
SMTP 를 사용하고 있는 Windows 의 경우는, 를 사용해 false 를 반환할 수 있습니다.이것은 PHP의 네이티브 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(): "x.x.x" 포트 25의 메일 서버에 연결하지 못했습니다. php.ini에서 "SMTP" 및 "smail_port" 설정을 확인하거나 ini_set()을 사용합니다.
[파일] => C:\www\X\X.php
[line] => 2
php로 메일을 보내는 것은 1단계 프로세스가 아닙니다.mail()은 true/false를 반환하지만 true를 반환한다고 해서 메시지가 발송되는 것은 아닙니다.mail()이 하는 일은 메시지를 큐에 추가하는 것뿐입니다(sendmail 또는 php.ini에서 설정한 것을 사용).
메시지가 php로 전송되었는지 확인할 수 있는 신뢰할 수 있는 방법은 없습니다.메일 서버 로그를 확인해야 합니다.
제 경우 PHP 스크립트에서 에러 메시지를 받을 수 없었습니다.(error_get_last()
, 또는ini_set('display_errors',1);
) 에러 메시지를 표시하지 않습니다.
$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()
fails 함수의 오류를 찾습니다.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입니다.
PEAR 메일러를 사용할 수 있습니다.PEAR 메일러는 같은 인터페이스를 가지지만 문제가 발생하면 PEAR_Error가 반환됩니다.
에러 메시지는 표시되지 않습니다.mail()
기능.이밖에 없어요true
또는false
이메일 전송이 승인되었는지 여부를 반환했습니다.최종적으로 전달되는지 여부가 아니라 기본적으로 도메인이 존재하는지 여부와 주소가 유효한 형식의 이메일 주소인지 여부입니다.
$e=error_get_last();
if($e['message']!==''){
// An error function
}
error_get_last(); - 마지막으로 발생한 오류를 반환합니다.
다른 사용자가 말했듯이, 송신 메일에 대한 오류 추적은 없으며, 발신 대기열에 메일을 추가한 부울 결과를 반환합니다.진정한 성공을 추적하려면 Swift Mailer, Zend_Mailer 또는 phpmailer와 같은 메일 라이브러리와 함께 SMTP를 사용해 보십시오.
이거 먹어봐.파일에 오류가 있으면 내 이메일 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
'programing' 카테고리의 다른 글
jQuery를 사용하여 테이블 행을 삭제하는 가장 좋은 방법은 무엇입니까? (0) | 2022.10.01 |
---|---|
Python 판다:특정 값과 일치하는 열의 인덱스 가져오기 (0) | 2022.10.01 |
Python에서 모든 서브디렉토리를 가져오는 방법 (0) | 2022.10.01 |
mariadb: mariadb의 직업.치명적인 신호가 제어 프로세스에 전달되어 서비스가 실패했습니다. (0) | 2022.09.27 |
MySQL: GROUP_CONCAT 값 정렬 (0) | 2022.09.27 |