PHPMailer .Exception:SendAsDeniedException.MapiExceptionSendAsDenied

我在我的网站上安装了PHPMailer.
但是,我无法以应有的方式工作.
当我通过网站发送电子邮件时,我收到以下错误:

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

我把箭头放在实际错误的位置.

当我尝试使用与接收电子邮件相同的电子邮件发送电子邮件时,一切都按我想要的方式工作.
这就是为什么我不明白它为什么这样做.

这是用于发送电子邮件的代码.

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.';
}

php_openssl扩展已启用.
我使用的是实际的电子邮件地址,因此不会使用像example@example.com这样的虚假电子邮件地址.

我的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>

以及totalMessage的javascript:

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();
    }
  }
);

我在这里做错了什么或者为什么我收到错误消息的问题是什么?

编辑:

调试级别2错误:

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

编辑2:

trim_input函数,如果你需要知道它的作用:

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

解决方法:

我猜这罪魁祸首是这样的:

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

你在这里做的是要求outlook通过使用任意用户输入伪造来自地址.这通常是个坏主意.错误消息名称表明这也是问题所在:SendAsDeniedException,即它不喜欢您发送的人.

试试这个:

$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']));

这是:将您自己的地址作为起始地址(因此您不会伪造任何东西),并使用提交者的地址作为回复,并在起始地址旁边使用他们的名字.

这个问题在the PHPMailer troubleshooting guide中有所涉及.

上一篇:吐槽一下讯飞R1电纸书阅读器


下一篇:HCIP第五天笔记