如何在PHPMailer中设置优先级



在以下情况下我能得到帮助吗?我有一个xyz.com网站,我正在使用PHPMailer。当有人在";联系我们";页面,我收到了一封电子邮件,但有没有办法让我在";重要的";或在";促销"选项卡?在这里,您可以看到有关实际代码的一些详细信息。

<?php
require_once __DIR__.'/vendor/autoload.php';
require_once __DIR__.'/functions.php';
require_once __DIR__.'/config.php';
session_start();
// Basic check to make sure the form was submitted.
if ($_SERVER['REQUEST_METHOD'] != 'POST') {
redirectWithError("The form must be submitted with POST data.");
}
// Do some validation, check to make sure the name, email and message are valid.
if (empty($_POST['g-recaptcha-response'])) {
redirectWithError("Please complete the CAPTCHA.");
}
$recaptcha = new ReCaptchaReCaptcha(CONTACTFORM_RECAPTCHA_SECRET_KEY);
$resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_REQUEST['REMOTE_ADDR']);
if (!$resp->isSuccess()) {
$errors = $resp->getErrorCodes();
$error = $errors[0];
$recaptchaErrorMapping = [
'missing-input-secret' => 'No reCAPTCHA secret key was submitted.',
'invalid-input-secret' => 'The submitted reCAPTCHA secret key was invalid.',
'missing-input-response' => 'No reCAPTCHA response was submitted.',
'invalid-input-response' => 'The submitted reCAPTCHA response was invalid.',
'bad-request' => 'An unknown error occurred while trying to validate your response.',
'timeout-or-duplicate' => 'The request is no longer valid. Please try again.',
];
$errorMessage = $recaptchaErrorMapping[$error];
redirectWithError("Please retry the CAPTCHA: ".$errorMessage);
}
if (empty($_POST['name'])) {
redirectWithError("Please enter your name in the form.");
}
if (empty($_POST['email'])) {
redirectWithError("Please enter your email address in the form.");
}
if (empty($_POST['subject'])) {
redirectWithError("Please enter your message in the form.");
}
if (empty($_POST['message'])) {
redirectWithError("Please enter your message in the form.");
}
if (!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
redirectWithError("Please enter a valid email address.");
}
if (strlen($_POST['message']) < 10) {
redirectWithError("Please enter at least 10 characters in the message field.");
}
// Everything seems OK, time to send the email.
$mail = new PHPMailerPHPMailerPHPMailer(true);
try {
//Server settings
$mail->SMTPDebug = CONTACTFORM_PHPMAILER_DEBUG_LEVEL;
$mail->isSMTP();
$mail->Host = CONTACTFORM_SMTP_HOSTNAME;
$mail->SMTPAuth = true;
$mail->Username = CONTACTFORM_SMTP_USERNAME;
$mail->Password = CONTACTFORM_SMTP_PASSWORD;
$mail->SMTPSecure = CONTACTFORM_SMTP_ENCRYPTION;
$mail->Port = CONTACTFORM_SMTP_PORT;
// Recipients
$mail->setFrom(CONTACTFORM_FROM_ADDRESS, CONTACTFORM_FROM_NAME);
$mail->addAddress(CONTACTFORM_TO_ADDRESS, CONTACTFORM_TO_NAME);
$mail->addReplyTo($_POST['email'], $_POST['name']);
// Content
$mail->Subject = "Dopenews - Contact us ".$_POST['Dopenews Studios'];
$mail->Body    = <<<EOT
Name: {$_POST['name']}
Email: {$_POST['email']}
Message: 
{$_POST['message']}
EOT;
$mail->send();
redirectSuccess();
} catch (Exception $e) {
redirectWithError("An error occurred while trying to send your message: ".$mail->ErrorInfo);
}

I假设您指的是可以设置的电子邮件优先级标志。我不确定"有没有办法让我在";重要的";或在";促销"选项卡">但要回答问题的标题:

我花了不到60秒的时间阅读PHPMailer文档并找到:

PHPMailer类:

$Priority:integer|null电子邮件优先级。

选项:空(默认(,1=高,3=正常,5=低。如果为null,则根本不设置标头。

所以代码中的用法是:

$mail->Priority = 1; // High priority flag is set.  

关于您使用常量的说明:

PHP手册指出:

常量的作用域是全局的。可以从脚本中的任何位置访问常量,而不考虑范围

您有一堆常量,如CONTACTFORM_SMTP_PASSWORDCOMPACTFORM_RECAPTCHA_SECRET_KEY等,因为它们是常量,所以可以从任何地方访问。

这对你来说可能很好,也很容易编码,但这是你系统上的一个重要安全漏洞。外部密码和Captcha密钥和值应该在使用后被覆盖和删除,以最大限度地降低这些密钥和值被显示给不该显示的人的风险,只需一个非常简单的脚本(print_r(get_defined_constants());(在PHP框架中的任何地方运行,所有密码和密钥值都会立即显示给想要找到它们的人。。。。


关于异常捕获的注意事项:

您捕获的异常不正确,您使用的是catch块,但其中的数据不是正确的数据。此外,您不应该向用户输出出了什么问题,因为这可能会泄露敏感的服务器数据,而这些数据最好远离公众。

您的代码应该发送到PHP错误日志中,而不是公开显示。

catch (Exception $ex) {
redirectWithError("An error occurred while trying to send your message.");
error_log("PHPMailer Exeption: ".print_r($ex->errorMessage(),true)); 
} 

值得注意的是,PHPMailer文档示例只是直接echo排除异常,但这是为了方便开发人员,而不是面向公众的生产代码

p.S您的try块也太大了,您只需要在PHPMailer try块中包含一到两行,大多数其他行不会抛出异常,因此不需要封装在该块中

最新更新