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">×</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 [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: <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: [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;
}
犯人はこれだと思います:
$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トラブルシューティングガイド で説明されています。
このエラーは、私と同じように別のことを意味する場合もあります。したがって、$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.
Office 365では、2018年9月1日以降、「<」と「>」の文字が必要です。
これは多くの場合、返信アドレスまたは送信元アドレスの前後に山かっこ( "<"および ">")を追加してデバイスまたはプリンターの設定を更新することで修正できます。
詳細は Microsoftのサポート を参照してください。
私は変化によって解決しました
$mail->setFrom('[email protected]', 'Your Name');
同じであるために$mail->Username
$mail->Username = '[email protected]';
そのようになるために:
$mail->setFrom('[email protected]', 'Your Name');