PHP mail() - 如何设置优先级?
Posted
技术标签:
【中文标题】PHP mail() - 如何设置优先级?【英文标题】:PHP mail() - How to set Priority? 【发布时间】:2011-05-09 08:23:13 【问题描述】:有没有办法设置php mail() 的优先级?我查看了在线手册,但找不到任何参考。
优先级是指标题中的高、正常、低或 1、2、3。这样收件人就知道邮件的紧迫性了。
谢谢!
【问题讨论】:
您是指出站邮件的排队方式吗?或者您是在询问导致某些邮件客户端呈现带有红色感叹号等消息的各种Priority:
标头吗?
除了有些人没有拼写检查。
@Everyone : 没有优先功能的 gmail 怎么样?或者 gmail 的任何替代品?
@ajreal:无论如何,优先级,作为被指控的 resseption,是非常不可靠的功能......
【参考方案1】:
这通常通过在标题中设置以下字段来完成:
“X-Priority”(值:1 到 5- 从最高 [1] 到最低 [5]), “X-MSMail-Priority”(值:高、正常或低), “重要性”(值:高、正常或低)。参见下面的例子(取自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);
?>
【讨论】:
为什么不用一个多行字符串呢? 不应该是 "X-Priority: 1 (Highest)".PHP_EOL 吗? 是否有定义这些标头的规范?以及 gmail/outlook/thunderbird/whatever 中的任何文档显示考虑了哪个标头? Edit:我发现这个iana.org/assignments/message-headers/message-headers.xhtml 指向RFC4021,但它声明标题是Priority
而不是X-Priority
@PavelLebedeff PHP docs 说:如果未收到消息,请尝试仅使用 LF (\n)。一些 Unix 邮件传输代理(尤其是 » qmail)会自动将 LF 替换为 CRLF(如果使用 CRLF,则会导致 CR 加倍)。这应该是最后的手段,因为它不符合 »RFC 2822。但老实说,我认为是时候与时俱进了。 \n
是换行的最佳方式,\r\n
不需要两个字符。
正如@Xenos 指出的那样,标准有点参差不齐。自 2012 年起,X-
前缀已被弃用 ("it wasn't a good idea, it leads to problems, we're sorry"),但只要邮件客户端使用这些形式,需要指定所有变体的情况就会持续存在。有趣的是,RFC4021 上有一个警告,将Priority
标记为“不用于一般用途”。在将 X.400 映射到 MIME 的上下文中,RFC 2156 关于这个标头还有很多话要说。【参考方案2】:
<?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/en/function.mail.php#91058
【讨论】:
【参考方案3】:在第 4 个参数中使用 X-Priority 标头调用它:
mail ( $to, $subject, $message , "X-Priority: 1")
【讨论】:
投反对票:未引用原始 RFC,其中 1 是最低优先级:tools.ietf.org/html/rfc577。 至少其他帖子添加High
或Highest
。在编程中,主观性会浪费大量时间。
好点。那糟糕的格式是怎么回事,我想我是从某个地方复制的?请注意,Outlook 使用X-priority: 2
,因此在实践中我实际上不会添加任何内容。我当然会保持不变。【参考方案4】:
A comment对PHP mail function documentation说:
<?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);
【讨论】:
【参考方案5】:要定义邮件优先级,您必须将此行放在标题中:
<?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
【讨论】:
为什么优先级有三个不同的标题?另外,什么是Higuest?这是拼写错误吗?我实际上看到了这个,但不觉得它有坚实的基础。 是的 .mis 拼写 .. 写那个的人。我是从 php.net 得到的 :) @Scott W.:不同的邮件程序使用不同的优先级标头。我喜欢标准。【参考方案6】:除了我的问题之外,一切都不起作用
$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";
PS:邮件正文必须在标题之前。
【讨论】:
以上是关于PHP mail() - 如何设置优先级?的主要内容,如果未能解决你的问题,请参考以下文章
PHP proc_nice 是不是让 Apache 线程处于新的优先级设置?