PHPMailer .Exception:SendAsDeniedException.MapiExceptionSendAsDenied

匿名 (未验证) 提交于 2019-12-03 01:10:02

问题:

i have installed PHPMailer on my website. but, i can't get it to work the way it should. when i send an email through the website i get the following error:

08:12:53    CLIENT -> SERVER: RCPT TO: 2016-10-13 08:12:53 CLIENT -> SERVER: DATA 2016-10-13 08:12:53   CLIENT -> SERVER: Date: Thu, 13 Oct 2016 08:12:51 +0000 2016-10-13 08:12:53 CLIENT -> SERVER: To: Kevin Kloet 2016-10-13 08:12:53    CLIENT -> SERVER: From: Name <myEmail@email.com> 2016-10-13 08:12:53 CLIENT -> SERVER: Reply-To: Name <myEmail@email.com> 2016-10-13 08:12:53     CLIENT -> SERVER: Subject: Subject 2016-10-13 08:12:53   CLIENT -> SERVER: Message-ID: 2016-10-13 08:12:53    CLIENT -> SERVER: X-Mailer: PHPMailer5.2.15 (https://github.com/PHPMailer/PHPMailer) 2016-10-13 08:12:53     CLIENT -> SERVER: MIME-Version: 1.0 2016-10-13 08:12:53  CLIENT -> SERVER: Content-Type: text/plain; charset=UTF-8 2016-10-13 08:12:53    CLIENT -> SERVER: 2016-10-13 08:12:53    CLIENT -> SERVER: Name: Name 2016-10-13 08:12:53     CLIENT -> SERVER: Email: myEmail@email.com 2016-10-13 08:12:53   CLIENT -> SERVER: Subject: Subject 2016-10-13 08:12:53   CLIENT -> SERVER: Message: message 2016-10-13 08:12:53   CLIENT -> SERVER: 2016-10-13 08:12:53    CLIENT -> SERVER: . 2016-10-13 08:12:57  SMTP ERROR: DATA END command failed: 550 5.3.4 554-554 5.2.0  STOREDRV.Deliver; delivery result banner 2016-10-13 08:12:57     --------> SMTP Error: data not accepted. Message was not sent.Mailer error: <-------- --------> SMTP Error: data not accepted.SMTP server error: <-------- DATA END command failed Detail: 554-554 5.2.0  STOREDRV.Deliver; delivery result banner SMTP code: 550 Additional SMTP info: 5.3.4echo2016-10-13 08:12:57   CLIENT -> SERVER: QUIT 2016-10-13 08:12:57   SMTP ERROR: QUIT command failed: 554-554 5.2.0 STOREDRV.Submission.Exception:SendAsDeniedException.MapiExceptionSendAsDenied; Failed to process message due to a permanent exception with message Cannot submit message. 16.55847:6900000 

i put arrows where the actual error is.

when i try to send an email using the same email as the receiving email everything works the way i want it to. thats why i don't get it why it does this.

here is the code that is used to send the email.

require("PHPMailerAutoload.php");  $mail = new PHPMailer(); $mail->IsSMTP(); $mail->Mailer = "smtp"; $mail->CharSet = 'UTF-8'; $mail->Host = 'tls://smtp-mail.outlook.com'; $mail->Port = "587"; // 8025, 587 and 25 can also be used. Use Port 465 for SSL. $mail->SMTPAuth = true; $mail->SMTPSecure = 'tls'; $mail->Username = "username"; $mail->Password = "password"; $mail->From = trim_input($_POST['Email']); $mail->FromName = trim_input($_POST['Name']); $mail->AddAddress("receivingEmailAdress@outlook.com", "my name"); $mail->AddReplyTo(trim_input($_POST['Email']), trim_input($_POST['Name'])); $mail->SMTPDebug = 1; $mail->Subject = trim_input($_POST['Subject']); $mail->Body = trim_input($_POST['message']); $mail->WordWrap = 50;  if (!$mail->Send()) {     echo 'Message was not sent.';     echo 'Mailer error: ' . $mail->ErrorInfo;     exit; } else {     echo 'Message has been sent.'; } 

the php_openssl extension is enabled. i am using actual email addresses so it's not the case of using fake email addresses like example@example.com.

my html:

<!-- modal --> <div id="myModal" class="modal fade" role="dialog">   <div class="modal-dialog">      <!-- Modal content-->     <div class="modal-content">       <div class="modal-header">         <button type="button" class="close" data-dismiss="modal">&times</button>         <h4 class="modal-title">Bericht sturen</h4>       </div>       <form method="POST" action="" >       <div class="modal-body">           <label for="messageName">Uw naam: </label>           <input type="text" id="messageName" name="Name" />           <label for="messageEmailAdress">Uw Emailadres: </label>           <input type="text" id="messageEmailAdress" name="Email" />           <label for="messageSubject">Onderwerp van uw bericht: </label>           <input type="text" id="messageSubject" name="Subject" />           <label for="message">bericht:  </label>           <textarea id="message" rows="4" cols="50" name="Message"></textarea>           <input type="hidden" name="totalMessage" />       </div>       <div class="modal-footer">         <button type="button" class="btn btn-default" data-dismiss="modal">Sluiten</button>         <input type="submit" name="Submit" class="btn btn-primary" value="Stuur bericht" />       </div>       </form>     </div>   </div> </div> 

and the javascript for the totalMessage:

jQuery(document).ready(function () { var form = document.getElementsByTagName('form')[0]; if (form) {     form.addEventListener('submit', contact, false); } function contact(e) {     // Prevent Default Form Submission     e.preventDefault();      var target = e.target || e.srcElement;     var i = 0;     var message = '';      // Loop Through All Input Fields     for (i = 0; i < target.length; ++i) {         // Check to make sure it's a value. Don't need to include Buttons         if (target[i].type != 'text' && target[i].type != 'textarea') {             // Skip to next input since this one doesn't match our rules             continue;         }          // Add Input Name and value followed by a line break         message += target[i].name + ': ' + target[i].value + "\r\n";     }      target.elements["totalMessage"].value = message;     this.submit();     }   } ); 

what am i doing wrong here or what is the problem why i get the error message?

edit:

debug level 2 error:

2016-10-13 10:13:42    SERVER -> CLIENT: 220 BLU436-SMTP224.smtp.hotmail.com Microsoft ESMTP MAIL Service, Version: 8.0.9200.16384 ready at Thu, 13 Oct 2016 03:13:39 -0700 2016-10-13 10:13:42    CLIENT -> SERVER: EHLO localhost 2016-10-13 10:13:42    SERVER -> CLIENT: 250-BLU436-SMTP224.smtp.hotmail.com Hello [82.176.119.145] 250-TURN 250-SIZE 41943040 250-ETRN 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES 250-8bitmime 250-BINARYMIME 250-CHUNKING 250-VRFY 250-TLS 250-STARTTLS 250 OK 2016-10-13 10:13:42    CLIENT -> SERVER: STARTTLS 2016-10-13 10:13:42    SERVER -> CLIENT: 220 2.0.0 SMTP server ready 2016-10-13 10:13:42    CLIENT -> SERVER: EHLO localhost 2016-10-13 10:13:42    SERVER -> CLIENT: 250-BLU436-SMTP224.smtp.hotmail.com Hello [82.176.119.145] 250-TURN 250-SIZE 41943040 250-ETRN 250-PIPELINING 250-DSN 250-ENHANCEDSTATUSCODES 250-8bitmime 250-BINARYMIME 250-CHUNKING 250-VRFY 250-AUTH LOGIN PLAIN XOAUTH2 250 OK 2016-10-13 10:13:42    CLIENT -> SERVER: AUTH LOGIN 2016-10-13 10:13:42    SERVER -> CLIENT: 334 VXNlcm5hbWU6 2016-10-13 10:13:42    CLIENT -> SERVER: xxx== 2016-10-13 10:13:42    SERVER -> CLIENT: 334 UGFzc3dvcmQ6 2016-10-13 10:13:42    CLIENT -> SERVER: xxx 2016-10-13 10:13:43    SERVER -> CLIENT: 235 2.7.0 Authentication succeeded 2016-10-13 10:13:43    CLIENT -> SERVER: MAIL FROM: 2016-10-13 10:13:43    SERVER -> CLIENT: 250 2.1.0 mySendingEmailaddress@email.com....Sender OK 2016-10-13 10:13:43    CLIENT -> SERVER: RCPT TO: 2016-10-13 10:13:43    SERVER -> CLIENT: 250 2.1.5 myReceivingEmailaddress@email.com 2016-10-13 10:13:43    CLIENT -> SERVER: DATA 2016-10-13 10:13:43    SERVER -> CLIENT: 354 Start mail input; end with . 2016-10-13 10:13:43    CLIENT -> SERVER: Date: Thu, 13 Oct 2016 10:13:41 +0000 2016-10-13 10:13:43    CLIENT -> SERVER: To: Kevin Kloet 2016-10-13 10:13:43    CLIENT -> SERVER: From: this is my name 2016-10-13 10:13:43    CLIENT -> SERVER: Reply-To: this is my name 2016-10-13 10:13:43    CLIENT -> SERVER: Subject: subject 2016-10-13 10:13:43    CLIENT -> SERVER: Message-ID: <3e21fa1900a9d30d3d51187e7719add6@localhost> 2016-10-13 10:13:43    CLIENT -> SERVER: X-Mailer: PHPMailer 5.2.16 (https://github.com/PHPMailer/PHPMailer) 2016-10-13 10:13:43    CLIENT -> SERVER: MIME-Version: 1.0 2016-10-13 10:13:43    CLIENT -> SERVER: Content-Type: text/plain; charset=UTF-8 2016-10-13 10:13:43    CLIENT -> SERVER: 2016-10-13 10:13:43    CLIENT -> SERVER: Name: this is my name 2016-10-13 10:13:43    CLIENT -> SERVER: Email: mySendingEmail@email.com 2016-10-13 10:13:43    CLIENT -> SERVER: Subject: subject 2016-10-13 10:13:43    CLIENT -> SERVER: Message: this is the message 2016-10-13 10:13:43    CLIENT -> SERVER: 2016-10-13 10:13:43    CLIENT -> SERVER: . 2016-10-13 10:13:49    SERVER -> CLIENT: 550 5.3.4 554-554 5.2.0 STOREDRV.Deliver; delivery result banner 2016-10-13 10:13:49    SMTP ERROR: DATA END command failed: 550 5.3.4 554-554 5.2.0 STOREDRV.Deliver; delivery result banner 2016-10-13 10:13:49    SMTP Error: data not accepted. Message was not sent.Mailer error:      SMTP Error: data not accepted.     SMTP server error: DATA END command failed Detail: 554-554 5.2.0     STOREDRV.Deliver; delivery result banner      SMTP code: 550 Additional      SMTP info: 5.3.4echo 2016-10-13 10:13:49    CLIENT -> SERVER: QUIT 2016-10-13 10:13:49    SERVER -> CLIENT: 554-554 5.2.0     STOREDRV.Submission.Exception:SendAsDeniedException.MapiExceptionSendAsDenied; Failed to process message due to a permanent exception with message Cannot submit message. 16.55847:6900000 2016-10-13 10:13:49       SMTP ERROR: QUIT command failed: 554-554 5.2.0     STOREDRV.Submission.Exception:SendAsDeniedException.MapiExceptionSendAsDenied; Failed to process message due to a permanent exception with message Cannot submit message. 16.55847:6900000 

edit 2:

the trim_input function if you need to know what it does:

function trim_input($data) { $data = trim($data); $data = stripslashes($data); $data = htmlspecialchars($data); return $data; } 

回答1:

I'd guess that the culprit is this:

$mail->FromName = trim_input($_POST['Name']); 

What you're doing here is asking outlook to forge the from address by using arbitrary user input. This is generally a bad idea. The error message name suggests that this is where the problem is too: SendAsDeniedException, i.e. it doesn't like who you're sending as.

Try this instead:

$mail->From = trim_input("receivingEmailAdress@outlook.com"); $mail->FromName = trim_input($_POST['Name']); $mail->AddAddress("receivingEmailAdress@outlook.com", "my name"); $mail->AddReplyTo(trim_input($_POST['Email']), trim_input($_POST['Name'])); 

This is: put your own address as the from address (so you're not forging anything), and use the submitter's address as a reply to, and also use their name alongside the from address.

This problem is covered in the PHPMailer troubleshooting guide.



回答2:

Office 365 requires the "<" and ">" characters since September 1st, 2018.

This can often be fixed by updating the settings on the device or printer by adding angle brackets ("<" and ">") around the Reply or Mail From address.

See Microsoft's support for details.



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!