web-dev-qa-db-ja.com

PHPMailer .Exception:SendAsDeniedException.MapiExceptionSendAsDenied

PHPMailerを自分のWebサイトにインストールしました。しかし、私はそれをあるべきように機能させることができません。ウェブサイトからメールを送信すると、次のエラーが表示されます。

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 <[email protected]> 2016-10-13 08:12:53
CLIENT -> SERVER: Reply-To: Name <[email protected]> 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: [email protected] 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

実際のエラーがあるところに矢印を付けました。受信メールと同じメールを使用してメールを送信しようとすると、すべて期待どおりに機能します。それが私がそれを取得しない理由です。

これは、Eメールの送信に使用されるコードです。

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("[email protected]", "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 [email protected] OK
2016-10-13 10:13:43    CLIENT -> SERVER: RCPT TO:
2016-10-13 10:13:43    SERVER -> CLIENT: 250 2.1.5 myReceivingEma[email protected]
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: <[email protected]>
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: [email protected]
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;
}
6
Kevin Kloet

犯人はこれだと思います:

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

ここでは、任意のユーザー入力を使用して送信元アドレスを偽造するようにOutlookに要求しています。これは一般に悪い考えです。エラーメッセージの名前は、これが問題の原因でもあることを示しています:SendAsDeniedException、つまり、送信者が好きではありません。

代わりにこれを試してください:

$mail->From = trim_input("[email protected]");
$mail->FromName = trim_input($_POST['Name']);
$mail->AddAddress("[email protected]", "my name");
$mail->AddReplyTo(trim_input($_POST['Email']), trim_input($_POST['Name']));

これは、自分のアドレスを差出人アドレスとして入力し(何も偽造しないようにするため)、送信者のアドレスを返信として使用し、送信者アドレスとともに名前を使用します。

この問題は PHPMailerトラブルシューティングガイド で説明されています。

10
Synchro

このエラーは、私と同じように別のことを意味する場合もあります。したがって、$mail->Fromアドレスは、認証に使用しているアドレスと同じです。それ以外の場合は、次のエラーが表示されます。

554 5.2.0 STOREDRV.Submission.Exception:SendAsDeniedException.MapiExceptionSendAsDenied;
Failed to process message due to a permanent exception with message Cannot submit message.
4
Picard

Office 365では、2018年9月1日以降、「<」と「>」の文字が必要です。

これは多くの場合、返信アドレスまたは送信元アドレスの前後に山かっこ( "<"および ">")を追加してデバイスまたはプリンターの設定を更新することで修正できます。

詳細は Microsoftのサポート を参照してください。

1
Jeff Kremer

私は変化によって解決しました

 $mail->setFrom('[email protected]', 'Your Name');

同じであるために$mail->Username

 $mail->Username = '[email protected]';

そのようになるために:

$mail->setFrom('[email protected]', 'Your Name');
0
Abd Abughazaleh