草庐IT

PHPMailer 异常 :SendAsDeniedException. MapiExceptionSendAsDenied

coder 2024-01-04 原文

我已经在我的网站上安装了 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 中有介绍.

关于PHPMailer 异常 :SendAsDeniedException. MapiExceptionSendAsDenied,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40016305/

有关PHPMailer 异常 :SendAsDeniedException. MapiExceptionSendAsDenied的更多相关文章

  1. ruby-on-rails - Rails - 乐观锁定总是触发 StaleObjectError 异常 - 2

    我正在学习Rails,并阅读了关于乐观锁的内容。我已将类型为integer的lock_version列添加到我的articles表中。但现在每当我第一次尝试更新记录时,我都会收到StaleObjectError异常。这是我的迁移:classAddLockVersionToArticle当我尝试通过Rails控制台更新文章时:article=Article.first=>#我这样做:article.title="newtitle"article.save我明白了:(0.3ms)begintransaction(0.3ms)UPDATE"articles"SET"title"='dwdwd

  2. ruby - #之间? Cooper 的 *Beginning Ruby* 中的错误或异常 - 2

    在Cooper的书BeginningRuby中,第166页有一个我无法重现的示例。classSongincludeComparableattr_accessor:lengthdef(other)@lengthother.lengthenddefinitialize(song_name,length)@song_name=song_name@length=lengthendenda=Song.new('Rockaroundtheclock',143)b=Song.new('BohemianRhapsody',544)c=Song.new('MinuteWaltz',60)a.betwee

  3. ruby - 在 Ruby 中重新分配常量时抛出异常? - 2

    我早就知道Ruby中的“常量”(即大写的变量名)不是真正常量。与其他编程语言一样,对对象的引用是唯一存储在变量/常量中的东西。(侧边栏:Ruby确实具有“卡住”引用对象不被修改的功能,据我所知,许多其他语言都没有提供这种功能。)所以这是我的问题:当您将一个值重新分配给常量时,您会收到如下警告:>>FOO='bar'=>"bar">>FOO='baz'(irb):2:warning:alreadyinitializedconstantFOO=>"baz"有没有办法强制Ruby抛出异常而不是打印警告?很难弄清楚为什么有时会发生重新分配。 最佳答案

  4. SPI接收数据异常问题总结 - 2

    SPI接收数据左移一位问题目录SPI接收数据左移一位问题一、问题描述二、问题分析三、探究原理四、经验总结最近在工作在学习调试SPI的过程中遇到一个问题——接收数据整体向左移了一位(1bit)。SPI数据收发是数据交换,因此接收数据时从第二个字节开始才是有效数据,也就是数据整体向右移一个字节(1byte)。请教前辈之后也没有得到解决,通过在网上查阅前人经验终于解决问题,所以写一个避坑经验总结。实际背景:MCU与一款芯片使用spi通信,MCU作为主机,芯片作为从机。这款芯片采用的是它规定的六线SPI,多了两根线:RDY和INT,这样从机就可以主动请求主机给主机发送数据了。一、问题描述根据从机芯片手

  5. ruby - 如何捕获 ruby​​ 中的所有异常? - 2

    我们如何捕获或/和处理ruby​​中所有未处理的异常?例如,这样做的动机可能是将某种异常记录到不同的文件或发送电子邮件给系统管理。在Java中我们会做Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandlerex);在Node.js中process.on('uncaughtException',function(error){/*code*/});在PHP中register_shutdown_function('errorHandler');functionerrorHandler(){$error=error_

  6. ruby - Sinatra 中的全局救援和日志记录异常 - 2

    如何在出现异常时指定全局救援,如果您将Sinatra用于API或应用程序,您将如何处理日志记录? 最佳答案 404可以在not_found方法的帮助下处理,例如:not_founddo'Sitedoesnotexist.'end500s可以通过调用带有block的错误方法来处理,例如:errordo"Applicationerror.Plstrylater."end错误的详细信息可以通过request.env中的sinatra.error访问,如下所示:errordo'Anerroroccured:'+request.env['si

  7. 多种方法期间的 Ruby 救援异常 - 2

    我构建了一个简单的银行应用程序,它能够执行通常的操作;充值、提现等我的Controller方法执行这些操作并拯救由帐户或其他实体引发的异常。以下是Controller代码中使用的一些方法:defopen(type,with:)account=createtype,(holders.findwith)addaccountinit_yearly_interest_foraccountboundary.renderAccountSuccessMessage.new(account)rescueItemExistError=>messageboundary.rendermessageendde

  8. ruby-on-rails - 使用 Ruby 正确处理 Stripe 错误和异常以实现一次性收费 - 2

    我查看了Stripedocumentationonerrors,但我仍然无法正确处理/重定向这些错误。基本上无论发生什么,我都希望他们返回到edit操作(通过edit_profile_path)并向他们显示一条消息(无论成功与否)。我在edit操作上有一个表单,它可以POST到update操作。使用有效的信用卡可以正常工作(费用在Stripe仪表板中)。我正在使用Stripe.js。classExtrasController5000,#amountincents:currency=>"usd",:card=>token,:description=>current_user.email)

  9. ruby - 在 ruby​​ 中使用正确的异常子类 - 2

    我可以访问ruby​​的异常层次结构(它在镐和蜂鸟中都提到过),但我不确定使用哪个异常,因为我没有找到关于每个术语含义的任何信息。使用正确的异常类重要吗? 最佳答案 创建您自己的异常时很重要。一个重要的警告是,继承自Exception而不是StandardError(常见错误)的异常不会被rescue捕获(没有任何参数)。 关于ruby-在ruby​​中使用正确的异常子类,我们在StackOverflow上找到一个类似的问题: https://stackove

  10. ruby - 乘客死于 UnknownHttpMethod 异常 - 2

    更新我尝试在我的应用程序Controller中捕获此异常,但无济于事。我还将Passenger更新到3.0.7并向他们的跟踪器提交了一个问题。我有一个Rails3.0.4应用程序在FreeBSD8.2上运行,Apache2.2.17、Passenger3.0.2和Ruby1.9.2-p180每隔一天就会死机。这是错误日志的回溯:[pid=85853thr=17189069660file=utils.rb:176time=2011-05-0412:08:13.022]:***ExceptionActionController::UnknownHttpMethodinapplication

随机推荐