PHP邮件() - 如何设置优先级?

39

有没有办法设置PHP mail()的优先级?我查看了在线手册,但找不到任何相关内容。

所谓优先级,是指在邮件头中使用高、中、低或1、2、3等级别,以便收件人了解邮件的紧急程度。

谢谢!


你是指邮件如何排队发送的问题吗?还是问有关Priority:标头的不同用法,这会导致某些邮件客户端以红色感叹号等方式呈现消息? - VoteyDisciple
除了一些人没有进行拼写检查。 - Evan Mulawski
@大家好:Gmail没有优先级功能,有什么替代品吗? - ajreal
1
@ajreal: 无论如何,优先级作为被指责的接受者,是如此不可靠的功能... - Pascal Qyy
6个回答

69

通常通过设置以下标题字段来完成:

  • "X-Priority"(值为1到5-从最高[1]到最低[5]),
  • "X-MSMail-Priority"(值为High、Normal或Low),
  • "Importance"(值为High、Normal或Low)。

请参见以下示例(摘自php的邮件函数文档):

<?php
        $headers = "MIME-Version: 1.0\n" ;
        $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
        $headers .= "X-Priority: 1 (Highest)\n";
        $headers .= "X-MSMail-Priority: High\n";
        $headers .= "Importance: High\n";

 $status   = mail($to, $subject, $message,$headers);
?> 

为什么不使用一个多行字符串呢? - DaVince
2
应该是 "X-Priority: 1 (最高优先级)",PHP_EOL 吗? - Pavel
2
是否有任何规范定义这些头信息?是否在 Gmail/Outlook/Thunderbird/任何其他文档中显示哪个标题被认为是有效的?[编辑]: 我已经找到了这个 https://www.iana.org/assignments/message-headers/message-headers.xhtml,它指向 RFC4021,但它声明标题是 Priority 而不是 X-Priority - Xenos
1
@PavelLebedeff PHP 文档 中说:如果邮件无法接收,请尝试仅使用 LF (\n)。某些 Unix 邮件传输代理(尤其是 » qmail)会自动将 LF 替换为 CRLF(如果使用 CRLF,则会导致 CR 加倍)。这应该是最后的办法,因为它不符合 » RFC 2822。但老实说,我认为现在应该跟上时代了。\n 是换行的最佳方式,我们不应该需要两个字符来表示 \r\n - mbomb007
1
正如@Xenos所指出的,标准有点不太完善。截至2012年,“X-”前缀已被弃用(“这不是一个好主意,它会导致问题,我们很抱歉”)。然而,只要使用这些形式的邮件客户端存在,需要指定所有变体的情况将持续存在。有趣的是,在RFC4021上有一个警告,将“Priority”标记为“不适用于一般用途”。RFC2156在将X.400映射到MIME的上下文中对此头部有更多的解释。 - amcgregor
@Xenos PriorityX-Priority是两个完全不同的概念。虽然X-Priority是一种供应商特定的非标准扩展(因此有“X-”),但Priority旨在告诉MTA在传输期间优先处理邮件,我猜大多数情况下都会被忽略。 Importance是唯一可以标记邮件为用户高优先级的标准标题。 - Bachsau

9
<?php 
        $headers = "MIME-Version: 1.0\n"; 
        $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"\n"; 
        $headers .= "X-Priority: 1 (Highest)\n"; 
        $headers .= "X-MSMail-Priority: High\n"; 
        $headers .= "Importance: High\n"; 

        $status = mail($to, $subject, $message, $headers); 
?>

来自:http://www.php.net/manual/zh/function.mail.php#91058


2

在第四个参数中使用 X-Priority 标头进行调用:

mail ( $to, $subject, $message , "X-Priority: 1")

被踩:没有提到原始RFC,其中规定1是最低优先级:https://tools.ietf.org/html/rfc577。*至少*其他帖子添加了“高”或“最高”。在编程中主观性会浪费大量时间。 - John
好点子。那这个糟糕的格式是怎么回事,我想这可能是从某个地方复制过来的吧?请注意Outlook使用X-priority:2,所以在实际应用中我不会添加任何内容。当然我会将其保存为一个常量。 - AndreKR

1

一条评论PHP邮件函数文档上说:

<?php 
        $headers = "MIME-Version: 1.0\n" ; 
        $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"\n"; 
        $headers .= "X-Priority: 1 (Highest)\n"; 
        $headers .= "X-MSMail-Priority: High\n"; 
        $headers .= "Importance: High\n"; 

        $status   = mail($to, $subject, $message,$headers);

0

要定义邮件优先级,您需要在邮件头中添加以下行:

<?php 
        $headers = "MIME-Version: 1.0\n" ; 
        $headers .= "Content-Type: text/html; charset=\"iso-8859-1\"\n"; 
        $headers .= "X-Priority: 1 (Highest)\n"; 
        $headers .= "X-MSMail-Priority: High\n"; 
        $headers .= "Importance: High\n"; 

 $status   = mail($to, $subject, $message,$headers); 
?> 

http://php.net/manual/en/function.mail.php


1
为什么有三个不同的优先级标头?此外,Higuest是什么?这是拼写错误吗?我确实看到过这个,但感觉不太可靠。 - anon445699
是的,这是一个拼写错误,由编写该代码的人犯下的。我从php.net上找到了它 :) - zod
1
@Scott W.:不同的邮件程序使用不同的优先级标头。我喜欢标准。 - Evan Mulawski

-1

除了这个,其他都对我的问题没有用。

$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1" . "\r\n";
$headers .= 'From: xyz@example.com' . "\r\n";
$headers .= 'Cc: Admin@example.com' . "\r\n";

注意:电子邮件正文必须在头部之前。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接