所以我想用
STRPO
为了测试变量中是否存在字符串,但在我所有使if语句工作的尝试中,都没有成功,所以我开始输出字符串,并试图找到
STRPO
发现了它,但它不是,尽管它很明显在那里!在这种情况下,我将在SMTP错误输出中搜索Gmail SMTP错误代码。
我知道如何修复错误,但我希望我的系统能够解析smtp错误并将其报告给我的用户。。。
PHP代码:
$Request = RequestPasswordReset($_POST["email"]);
echo $Request;
echo "<br>Position of Error Code: " . strpos($Request, "gsmtp SMTP code: 550");
die();
if($Request === "SUCCESS") {
DisplayError("Password Reset Successful", "We have sent a email that contains a link to reset your password.", "/account/resetpassword.php");
} else if($Request === "USER_NOT_FOUND") {
DisplayError("Password Reset Request Failed", "The specified email is not tied to any accounts in our system.", "/account/resetpassword.php");
} else if(strpos($Request, "gsmtp SMTP code: 550") !== false) {
DisplayError("Password Reset Request Failed", "The mail was blocked by our relay due to IPs being not whitelisted.", "/account/resetpassword.php");
} else {
DisplayError("Password Reset Request Failed", "The request failed for an unknown reason.", "/account/resetpassword.php");
}
文本输出:
它确实在重复,我重复了
$Request
两次,它确实做了下面两次
以下发件人地址失败:XXXXXXX:MAIL-From命令失败,中继[XXXXXXX]的凭据无效。您在G套件SMTP中继服务中注册的IP地址与发送此电子邮件的帐户的域不匹配。如果您试图中继来自未在G Suite帐户下注册或具有空信封的域的邮件,则必须将邮件服务器配置为使用SMTP身份验证来标识发送域,或在HELO或EHLO命令中显示您的域名之一。有关更多信息,请访问
https://support.google.com/a/answer/6140680#invalidcred
r126sm1314271qke。4-gsmtp,550,5.7.1SMTP服务器错误:MAIL FROM命令失败详细信息:中继[XXXXXXX]的凭据无效。您在G套件SMTP中继服务中注册的IP地址与发送此电子邮件的帐户的域不匹配。如果您试图中继来自未在G Suite帐户下注册或具有空信封的域的邮件,则必须将邮件服务器配置为使用SMTP身份验证来标识发送域,或在HELO或EHLO命令中显示您的域名之一。有关更多信息,请访问
https://support.google.com/a/answer/6140680#invalidcred
r126sm1314271qke。4-gsmtp SMTP代码:550其他SMTP信息:5.7.1
错误代码位置:
(编辑)重置密码请求功能:
function RequestPasswordReset($Email) {
$User = GetUser_Email($Email);
if($User === "NOT_FOUND") {
return "USER_NOT_FOUND";
}
$Link = GeneratePasswordResetLink();
$SendEmail = SendPasswordReset($User["Email"], $User["FirstName"] . $User["LastName"], $Link);
if($SendEmail !== "SUCCESS") {
return $SendEmail;
} else {
$PDO_Connection = CreateMySQLConnection();
$PDO_CMD = $PDO_Connection -> prepare("UPDATE accounts SET ResetPassword=? WHERE Email=?");
$PDO_CMD -> execute(array($Link, $User["Email"]));
return "SUCCESS";
}
}
(编辑)发送密码重置功能:
$User = GetUser_ResetID($resetID);
$mail = CreateSMTPConnection();
$mail->AddAddress($targetAddress, $targetName);
$mail->IsHTML(true);
$mail->Subject = 'LitenUp Password Reset';
$mail->Body = str_replace("https://mylitenup.net/account/resetpassword.php?ID=", ("https://mylitenup.net/account/resetpassword.php?ID=" . $resetID), file_get_contents($_SERVER['DOCUMENT_ROOT'] . "/php/mailer/documents/resetpassword.html"));
$mail->AltBody = 'Reset Your Password: https://mylitenup.net/account/resetpassword.php?ID=' . $resetID;
$mail->XMailer = 'LitenUp Mailer';
$mail->XPriority = '1';
try{
$mail->send();
return "SUCCESS";
} catch (phpmailerException $e) {
return $e->errorMessage();
} catch (\Exception $e) {
return $e->getMessage();
}
(编辑):我试过了
mb_strpos
,但它不起作用,所以如果这是有效的,为什么它对我不起作用?我做的
mb_strpos($Request, "gsmtp SMTP code: 550");
,但在执行后,它会回显请求,但
Position of Error Code:
线路没有回声。
(更新1):我真的很抱歉耽搁了,最坏的情况下,我会再次悬赏。然而,你们是对的!当我第一次遇到错误时,我将其输出并复制了行“gsmtp SMTP代码:550”,但在完成标记后,似乎出现了某种新的行。您可以在
该行应该更像“gsmtp”++“SMTP代码:550”,但我不确定应该是什么换行符。我试过了
和\n。