什么是 -- 在电子邮件 headers 中?

What are -- in email headers?

最近我发现 -- 作为 php 中 mail() 函数的 header。我试图 google 出来,但没有找到任何结果,所以我发布了这个问题。在尝试编辑我的代码时,我发现这两个 -- 之后的 ID 应该是 unique.My php 脚本来发送带有附件的电子邮件。

<?php

$file = "http://wpbrisk.com/download/email/email/doc1.pdf"; // Specify the Url of the attachment here

$filename = "doc1.pdf"; // Specify the name of the file here

$to="hudixt@gmail.com"; // Enter the mail to which you want to sent the attachement
$your_name = "Hudixt"; // Your name
$from_mail = "info@wpbrisk.com"; // Your email

$subject = "This is a mail with attachment."; // Subject
$message = "<div id='hello'>World</div>"; // message

// Get the content of the file
    $content = file_get_contents($file);

    $content = base64_encode($content);
    $uid = md5(uniqid(time()));

    $header = "From: ".$from_name." <".$from_mail.">\r\n";

    $header .= "MIME-Version: 1.0\r\n";
    $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
    $header .= "This is a multi-part message in MIME format.\r\n";
    $header .= "--".$uid."\r\n";


    $header .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    $header .= $message."\r\n\r\n";
    $header .= "--".$uid."\r\n";

    $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here

    $header .= "Content-Transfer-Encoding: base64\r\n";
    $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
    $header .= $content."\r\n\r\n";
    $header .= "--".$uid."--";
    mail($mailto, $subject, "", $header);
        ?>

你能告诉我这个 -- 在 header 中意味着什么以及为什么它应该是唯一的。

对我来说似乎是一个 MIME 边界...

基本上,当您在 e-mail 消息中包含多种类型的内容时,不同的部分将使用 ID 分隔。然后每个部分前面都有'--',然后是边界。来自 RFC:

因此,典型的多部分 Content-Type header 字段可能如下所示:

 Content-Type: multipart/mixed; 
      boundary=gc0p4Jq0M2Yt08jU534c0p

这表示该实体由多个部分组成,每个部分本身的结构在语法上与 RFC 822 消息相同,只是 header 区域可能完全为空,并且每个部分都是在行之前 --gc0p4Jq0M2Yt08jU534c0p

有关详细信息,请参阅 http://www.w3.org/Protocols/rfc1341/7_2_Multipart.html

要回答你的最后一个问题,当你有一个带有文本和附件的 e-mail 时,整个邮件将有 Content-Type: multipart/mixed,文本将是 text/plain, 附件(假设是一个 word 文件)将是 application/msword。每个新的 content-type 部分将由 '--' 分隔。 $边界。选择的边界是唯一的并且与其他消息部分不同,因此它不会出现在其中任何一个内部 - 当解释 e-mail 内容的应用程序找到 $boundary 时,必须安全地假设这是一个预期的边界而不仅仅是消息中的侥幸。

希望对您有所帮助!

这些“--ID--”行是 MIME 部分边界(参见 https://en.wikipedia.org/wiki/MIME). They are described in https://www.rfc-editor.org/rfc/rfc2046。它们用于分隔消息的不同部分。

根据 RFC#2046,那些必须“足够”唯一。如果您想将一封电子邮件封装到另一封电子邮件中,则边界不能相互推断,即它们必须是不同的。因此,让它们“尽可能和需要”变得独一无二是个好主意:

This implies that it is crucial that the composing agent be able to choose and specify a unique boundary parameter value that does not contain the boundary parameter value of an enclosing multipart as a prefix. (https://www.rfc-editor.org/rfc/rfc2046#section-5.1)