Member 14697878 Ответов: 2

Как получить уведомление о состоянии доставки в phpmailer


эта почтовая программа отправляет почту но ,
но не показывает ошибку доставки почты после отправки почты ,
Я хочу получить ошибку доставки, если почта не будет отправлена успешно.

Что я уже пробовал:

require_once(APPPATH . '../third_party/PHPMailer/src/PHPMailer.php');
			require_once(APPPATH . '../third_party/PHPMailer/src/SMTP.php');
			require_once(APPPATH . '../third_party/PHPMailer/src/Exception.php');

			// Load Composer's autoloader
			require 'application/helpers/vendor/autoload.php';
			// Instantiation and passing `true` enables exceptions
			$mail = new PHPMailer(true);

			try {
				//Server settings
				$mail->SMTPDebug = SMTP::DEBUG_SERVER;                      // Enable verbose debug output
				$mail->isSMTP();                                            // Send using SMTP
				$mail->Host       = 'smtp.office365.com';                   // Set the SMTP server to send through
				$mail->SMTPAuth   =  true;                                   // Enable SMTP authentication
				$mail->Username   = 'xxxx.in';                     // SMTP username
				$mail->Password   = 'xxxx';                               // SMTP password
				$mail->SMTPSecure = PHPMailer::ENCRYPTION_STARTTLS;         // Enable TLS encryption; `PHPMailer::ENCRYPTION_SMTPS` also accepted
				$mail->Port       = 587;    
				// $mail->SMTPDebug  = 1; 
				//Recipients
				$mail->setFrom('xxxx.in', 'Mailer');
				$mail->addAddress($data['mail'], 'Deepak Agarwal');     // Add a recipient
				// Attachments
				if($data['path'] != "" && $data['file'] != "")
				{
					$mail->addAttachment($data['path'],$data['file']);   
				}
				// $mail->addAttachment('2.png');         // Add attachments
				// $mail->addAttachment('3.png');         // Add attachments
				//$mail->addAttachment('1.png', 'Certificate Logo.png');    // Optional name

				// Content
				$mail->isHTML(true);                                  // Set email format to HTML
				$mail->Subject = $data['subject'];
				$mail->Body    = $data['message'];
				$mail->AltBody = $data['message'];
				if(!$mail->send())
				{
					// $this->CI->session->set_flashdata('msg', 'Message has not  sent successfully.');
					echo $mail->ErrorInfo;
					echo "Not send";
					$this->CI->session->set_flashdata('msg',$mail->getMessage());
					
					
				}else if(!$mail->ValidateAddress($data['mail'])){
					$this->CI->session->set_flashdata('errmail','Mail Not Send..!');
				}
				else{
					$this->CI->session->set_flashdata('msg', 'Message has been sent successfully.');
				
				}
				
			} 
			catch (phpmailerException  $e) {
				$this->CI->session->set_flashdata('errmail', $e->errorMessage()); //Pretty error messages from PHPMailer
				echo $e->errorMessage();
			}
			catch (Exception $e) {
				$this->CI->session->set_flashdata('errmail', $e->getMessage()); //Boring error messages from anything else!
				echo $e->getMessage();
			}

2 Ответов

Рейтинг:
7

Richard MacCutchan

Что вы подразумеваете под "ошибкой доставки"? Если адрес электронной почты окажется действительным, то он будет отправлен с вашего сервера. Только когда удаленный адрес обнаружит, что имя не существует, он ответит вам недоставленным сообщением. Но это могут быть минуты, часы или даже дни спустя.


Member 14697878

Я хочу получить уведомление о доставке почты, если формат почты правильный, например (abc@gmail.com) , но эта почта не верна. Поэтому я хочу (недействительное почтовое) уведомление..


I этот код не показывает никаких ошибок, если почта неверна.

Richard MacCutchan

Вы не можете получить его, так как адрес технически правильный. Только когда он попадет на сервер gmail, он будет отклонен, когда gmail не сможет найти запись почты для имени "abc". И тогда все, что он может сделать, это отправить электронное сообщение на адрес в поле отправителя исходного сообщения.

Рейтинг:
19

MadMyche

Ответ вы получаете от (вашего) почтового сервера; и нет никакой гарантии, что ваш почтовый сервер будет знать состояние почтового ящика получателей на другом сервере.

Электронная почта также не является мгновенной системой "точка-точка"; устойчивость встроена для повторных попыток подключения через определенные интервалы времени в течение заданного периода времени. Нередко можно найти SMTP - серверы, настроенные на то, чтобы продолжать пытаться отправить сообщение в течение нескольких дней. Очевидно... вы не будете ждать так долго, чтобы получить сообщение "ОК" от вашего приложения.

Возможно, вы захотите погуглить, как на самом деле работает электронная почта, особенно жизненный цикл SMTP и коды ответов SMTP.