【问题标题】:what rule for creating an MIME boundary (for Mail attachments)创建 MIME 边界的规则(对于邮件附件)
【发布时间】:2011-09-04 22:00:46
【问题描述】:

我正在使用 PHP mail() 函数发送带有附件的邮件。 因此,PHP 源代码包含一个边界来定义附件的开始和结束位置。

所以问题是:是否有用于创建此 MIME 边界的规则(例如,只允许使用字母和数字) 我仍然知道这个 SO 问题 -> What rules apply to MIME boundary? 是否有必要从 HASH 中创建边界? 因为以下也有效:

$headers .= "Content-Type: multipart/related; boundary=\"abc\"";
[...]
$msg .="--abc\n";
[...]
$msg .= "--abc--\n\n"; 

有什么理由,为什么 MIME 边界应该是唯一值?

..我在互联网上没有找到任何信息。

谢谢!

【问题讨论】:

  • 不要构建自己的 mime 消息。使用 PHPMailer 或 Swiftmailer 为您完成。
  • ..好吧..但为什么不呢? PHPMailer 或 Swiftmailer 是第三方工具,对吧?!
  • php 的邮件功能尽可能地少,同时仍然能够发送邮件。由于缺少标题等原因,您发送的任何内容很可能会被标记为垃圾邮件。
  • 邮件将在封闭网络内发送。服务器在邮件服务器白名单上,所以我不会有“垃圾邮件”问题。但是 - 谢谢你提供的信息。

标签: php email hash mime boundary


【解决方案1】:

没有什么说边界标记必须是哈希值,但它们必须是唯一的。想想如果您插入的实际电子邮件文本在某处自然包含 --abc-- 字样会发生什么。

您的电子邮件将如下所示:

--abc--    <--actual boundary
This is my email. There are many like it, but this one is mine.
Now for some reason I'm going to put in a line that shouldn't be there
--abc--    <--part of the email
There it was. Did you see it? No, you didn't, because the mail client saw a boundary
line and sliced it out. Because of this extra boundary, now the email has 2 sections,
instead of 1.
--abc--    <--actual boundary

那么...邮件客户端如何知道电子邮件的部分内容和“开销”内容?这就是您使用独特边界的原因。

哈希是最简单的方法。在极端情况下,电子邮件文本不太可能在可以被视为边界标记的确切位置包含自己的哈希值。

【讨论】:

  • 因此在每次运行时生成一个边界并不重要。 (这会消耗 CPU 功率)。创建一个长哈希就足够了,以便将这个哈希用于所有邮件。
  • 没有。您必须每次生成哈希。没有什么说哈希不能自然地出现在其他电子邮件的正文中。这就是“在线信号”的问题。不管边界标记自然出现的可能性有多大,也绝不可能。
  • 考虑到现代字符串搜索功能的效率,我不清楚计算有界数据的哈希值如何比生成伪随机边界并仅搜索有界数据更有效。然后你会得到一个实际上是唯一的边界,而不是统计上的“唯一”(ish)。
  • 我同意 Spike0xff 的观点。在随机生成的字符串上计算哈希的唯一性或效率增益是什么?另外,有界数据的哈希值不会自然地出现在有界数据中是什么意思?这种可能性肯定会等于或大于出现在有界数据中的随机字符串?
【解决方案2】:

MIME 边界应该不可能出现在用户的实际消息中。哈希是一个不错的选择,因为它们长且独特。独特性还使某人很难通过弄清楚您使用的边界并将其包含在他们的消息中来弄乱他们的消息。但是,我找不到任何要求边界是唯一的,只是整行不得超过 70 个字符。

【讨论】:

  • 如果边界不是唯一的,可能会影响邮件链或将电子邮件作为附件附加。
  • 哈希在这个意义上并不是唯一的。根据定义,哈希是一个多对一函数,因此根据定义,在其域中不是唯一的,在这种情况下是邮件消息。 (如果它们是独一无二的,我们会使用它们来获得出色的压缩效果,对吧?)
猜你喜欢
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 2013-03-17
  • 1970-01-01
  • 2021-10-25
  • 1970-01-01
相关资源
最近更新 更多