PHP Mailer отправляет ошибку, данные не принимаются - PullRequest
0 голосов
/ 20 февраля 2019

У меня следующая ошибка в PHPMailer:

Ошибка SMTP: данные не приняты. Ошибка сервера SMTP: сбой команды DATA END Подробности: STOREDRV.Submission.Exception: SendAsDeniedException.MapiExceptionSendAsDenied;Не удалось обработать сообщение из-за постоянного исключения с сообщением Невозможно отправить сообщение.

Я использую следующее:

public function sendEmail($conn, $user, $to_email, $subject, $messageToSent)
    {
        //Check if user exists
        $exist = $this->checkIfUserExist($conn, $user);
        $from = $this->getUserEmail($conn, $user);
        if($exist['exist'])
        {
            // Please specify your Mail Server - Example: mail.example.com.
            //$mail = new PHPMailer\PHPMailer();
            $mail = new PHPMailer\PHPMailer\PHPMailer;                // Passing `true` enables exceptions
            $message = "success";
            try {
                //Server settings
                $mail->SMTPDebug = 2;                                 // set it to 2 to Enable verbose debug output
                $mail->isSMTP();                                      // Set mailer to use SMTP
                $mail->Host = 'smtp.office365.com';                   // Specify main and backup SMTP servers
                $mail->SMTPAuth = true;                               // Enable SMTP authentication
                if($from=='' || $from==null || $from=="NULL")
                {

                    $mail->setFrom('i@abc.org');
                }
                if($from!='')
                {

                    $mail->setFrom($from);
                }
                $mail->Username = 'i@abc.org';     // SMTP username
                $mail->Password = 'xyz';                         // SMTP password
                $mail->SMTPSecure = 'tls';                            // Enable TLS encryption, `ssl` also accepted
                $mail->Port = 587;                                    // TCP port to connect to
                //$mail->AuthType = 'PLAIN';
                //Recipients
                //$mail->setFrom($user.'@abc.com');
                //$mail->setFrom($from);
                $mail->addAddress('i@abc.org');     // Add a recipient
                //$mail->addAddress('ellen@example.com');               // Name is optional
                $mail->addReplyTo('info@example.com', $subject);
                //$mail->addCC('cc@example.com');
                //$mail->addBCC('bcc@example.com');

                //Attachments
                //$mail->addAttachment('/var/tmp/file.tar.gz');         // Add attachments
                //$mail->addAttachment('/tmp/image.jpg', 'new.jpg');    // Optional name

                //Content
                $mail->isHTML(true);                                  // Set email format to HTML
                $mail->Subject = $subject;
                if($from=="i@abc.org")
                {
                    $mail->Body = $messageToSent. '<p>The user asking for password recovery does not have a valid email. Thus, the sender will be shown as sent from the admin email. The user have the following ID: </p><h3>'.$exist['user_id'].'</h3>';
                }
                else
                {
                    $mail->Body = $messageToSent. '<p>The user have the following ID: </p><h3>'.$exist['user_id'].'</h3>';

                }
                $mail->AltBody = 'Please take actions according to needs.';

                if($mail->send())
                {
                    echo json_encode($message);
                }
                else
                {
                    echo json_encode($mail->ErrorInfo);
                }

            } catch (Exception $e) {
                echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
            }
        }
        else
        {
            echo json_encode("UserDoesntExist"); 
        }

    }

Я прочитал здесь что $mail->Username и $mail->setFrom должны быть одинаковыми, но таким образом, мы должны получить пароли для каждого электронного письма для изменения $mail->Password.

1 Ответ

0 голосов
/ 20 февраля 2019

Подсказка в названии исключения: SendAsDenied;в нем говорится, что вы не можете использовать что-либо, кроме своего имени пользователя, в качестве адреса отправителя, особенно не произвольные (поддельные) адреса.

Если вы хотите избежать проблем с подделкой, отправьте сообщение со своего адреса администратора, но установите адрес пользователя какответить на.Таким образом, вы не подделываете, и ответы будут отправлены в нужное место.

...