我正在使用phpmailer发送电子邮件,但我想为我的公司制作一个自定义标题,方法是添加包含任何自定义标题的textarea字段,例如使用类似这样的标题:
exemple of header 或任何其他标题类型.. 我怎么能这样做,提前谢谢。
答案 0 :(得分:19)
您需要对PHPmailer设置的默认标头进行一些发现和修改才能实现。
您需要使用不同的功能来设置/编辑标题,具体取决于您要设置/编辑的标题类型。以下是一些例子:
自:
$mail->setFrom('from@example.com', 'Mailer');
主题:
$mail->Subject = 'Here is the subject';
自定义:
$mail->addCustomHeader('X-custom-header', 'custom-value');
简而言之,当标题在文本框中自由输入时,这是非常努力的。但是,您可以随时进行检测和验证。
答案 1 :(得分:2)
PHP方法PHPMailer :: addCustomHeader(PHP Mailer库)
$ 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():未在php.ini或自定义“发件人:”标头中设置的“ sendmail_from” 失踪。 Windows下的From标头还设置了Return-Path。
注意:
如果未收到消息,请尝试仅使用LF(\ n)。一些Unix邮件 传输代理(最著名的是»qmail)用CRLF替换LF 自动(如果使用CRLF,则会导致CR翻倍)。这个 应该是不得已而为之,因为它不符合»RFC 2822。
这里是在自定义标头中发送PHP版本的示例。另外,如果需要在邮件中查找自定义标头,则可以在RAW标头中找到此信息。
有时您需要访问电子邮件邮箱。在大多数情况下,这是使用Internet消息访问协议或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);