如何使用phpmailer设置自定义标头

时间:2016-04-29 00:03:05

标签: email header phpmailer return-path

我正在使用phpmailer发送电子邮件,但我想为我的公司制作一个自定义标题,方法是添加包含任何自定义标题的textarea字段,例如使用类似这样的标题:

exemple of header 或任何其他标题类型.. 我怎么能这样做,提前谢谢。

2 个答案:

答案 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;
}

https://hotexamples.com/examples/-/PHPMailer/addCustomHeader/php-phpmailer-addcustomheader-method-examples.html

如果您使用的是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);