Как установить пользовательский заголовок с помощью phpmailer
Я использую phpmailer для отправки электронных писем, но я хочу создать собственный заголовок для своей компании, добавив поле textarea, содержащее любой пользовательский заголовок, например, используя заголовок, подобный этому:
пример заголовка или любых других типов заголовков. Как я могу это сделать, заранее спасибо.
2 ответа
Для этого вам нужно будет найти и изменить заголовки по умолчанию, установленные PHPmailer.
Вам нужно будет использовать различные функции для установки / редактирования заголовков в зависимости от типа заголовка, который вы хотите установить / редактировать. Вот несколько примеров:
От:
$mail->setFrom('from@example.com', 'Mailer');
Предмет:
$mail->Subject = 'Here is the subject';
Таможня:
$mail->addCustomHeader('X-custom-header', 'custom-value');
Короче говоря, это довольно сложно сделать, когда заголовки вводятся свободно в текстовом поле. Однако это возможно при обнаружении и проверке на вашей стороне.
Метод PHP PHPMailer:: addCustomHeader (Библиотека PHPMailer)
$ mail-> addCustomHeader ('X-custom-header: custom-value');
ini_set('display_errors', 1);
// Import PHPMailer classes into the global namespace
// These must be at the top of your script, not inside a function
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
//Load Composer's autoloader
require 'vendor/autoload.php';
$mail = new PHPMailer(true); // Passing `true` enables exceptions
try {
//Server settings
$mail->SMTPDebug = 2; // Enable verbose debug output
$mail->isSMTP(); // Set mailer to use SMTP
$mail->Host = 'smtp.gmail.com'; // Specify main and backup SMTP servers
$mail->SMTPAuth = true; // Enable SMTP authentication
$mail->Username = 'example@gmail.com'; // SMTP username
$mail->Password = 'password'; // SMTP password
$mail->SMTPSecure = 'ssl'; // Enable TLS encryption, `ssl` also accepted
$mail->Port = 465; // TCP port to connect to
$mail->Host = 'ssl://smtp.gmail.com:465';
//Recipients
$mail->setFrom('sentfrom@example.com', 'From SMTP Mailer');
$mail->addAddress('receiver@example.com'); // Name is optional
$mail->addReplyTo('test@gmail.com', 'Reply');
$mail->addCustomHeader('X-custom-header: custom-value');
//$mail->addCC('cc@example.com');
//$mail->addBCC('bcc@example.com');
//Attachments
//$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments
//$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name
//Content
$mail->isHTML(true); // Set email format to HTML
$mail->Subject = 'Here is the subject';
$mail->Body = 'This is the HTML message body <b>in bold!</b> and message';
$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';
$mail->send();
echo 'Message has been sent';
} catch (Exception $e) {
echo 'Message could not be sent. Mailer Error: ', $mail->ErrorInfo;
}
Если вы используете почтовую функцию PHP, попробуйте это:
Additional_headers (необязательно) Строка или массив для вставки в конце заголовка письма.
Обычно это используется для добавления дополнительных заголовков (From, Cc и Bcc). Несколько дополнительных заголовков должны быть разделены CRLF (\r\n). Если для составления этого заголовка используются внешние данные, данные должны быть очищены, чтобы нежелательные заголовки не могли быть введены.
Если массив передан, его ключами являются имена заголовков, а его значения - соответствующие значения заголовков.
Замечания:
До PHP 5.4.42 и 5.5.27, соответственно, Additional_headers не имел защиты от внедрения заголовка почты. Поэтому пользователи должны убедиться, что указанные заголовки безопасны и содержат только заголовки. т.е. Никогда не начинайте тело письма, помещая несколько новых строк.
Замечания:
При отправке почты, почта должна содержать заголовок От. Это можно установить с помощью параметра Additional_headers или по умолчанию в php.ini.
В противном случае появится сообщение об ошибке, подобное предупреждению: mail(): "sendmail_from" не задан в php.ini или отсутствует пользовательский заголовок "From:". Заголовок From также устанавливает Return-Path под Windows.
Замечания:
Если сообщения не получены, попробуйте использовать только LF (\n). Некоторые агенты пересылки почты Unix (прежде всего "qmail) автоматически заменяют LF на CRLF (что приводит к удвоению CR, если используется CRLF). Это должно быть последним средством, так как оно не соответствует "RFC 2822.
Вот пример отправки версии PHP в пользовательских заголовках. Кроме того, если вам нужно найти пользовательские заголовки в почте, вы можете найти эту информацию в RAW заголовках.
Иногда вам нужно получить доступ к почтовым ящикам электронной почты. В большинстве случаев это делается с использованием протокола доступа к сообщениям в Интернете или IMAP. Читать статью https://www.toptal.com/php/building-an-imap-email-client-with-php
$to = 'nobody@example.com';
$subject = 'the subject';
$message = 'hello';
$headers = array(
'From' => 'webmaster@example.com',
'Reply-To' => 'webmaster@example.com',
'X-Mailer' => 'PHP/' . phpversion()
);
mail($to, $subject, $message, $headers);