gpt4 book ai didi

php - 使用正则表达式从原始电子邮件中提取正文

转载 作者:行者123 更新时间:2023-12-04 18:21:21 26 4
gpt4 key购买 nike

--047d7b33d6decd251504bfe78895
Content-Type: multipart/alternative; boundary=047d7b33d6decd250d04bfe78893

--047d7b33d6decd250d04bfe78893
Content-Type: text/plain; charset=UTF-8

twest

ini sebuah proiduct abru

awdawdawdawdwa

aw
awdawdaw

--047d7b33d6decd250d04bfe78893
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div class=3D"gmail_quote">twest=C2=A0<div><br></div><div>ini sebuah proidu=
ct abru</div><div><br></div><div>awdawdawdawdwa</div><div><br></div><div>aw=
</div><div>awdawdaw</div>
</div><br>

--047d7b33d6decd250d04bfe78893--
  • 如何使用正则表达式获取邮件文本/纯文本和文本/html 内容?
  • 一封电子邮件是否只有 1 个内容正文?由 text/html 和 text/plain 组成

  • *这是我目前做错的一个片段。
        $parts = explode('--', $this->rawemail);
    $this->headers = imap_rfc822_parse_headers($this->rawemail);
    # var_dump($parts);
    # Process the parts
    foreach ($parts as $part)
    {
    # Get Content text/plain
    if (preg_match('/Content-Type: text\/plain;/', $part))
    {
    $body_parts = preg_split('/\n\n/', $part);

    # If Above the newline (Headers)
    if ($body_parts[0])
    {
    # var_dump($body_parts[0]);
    }

    # If Below the newline (Data)
    if ($body_parts[1])
    {
    var_dump($body_parts[1]);
    }
    }

    # Get Content text/html
    if (preg_match('/Content-Type: text\/html;/', $part))
    {
    $body_parts = preg_split('/\n\n/', $part);

    # If Above the newline (Headers)
    if ($body_parts[0])
    {
    # var_dump($body_parts[0]);
    }

    # If Below the newline (Data)
    if ($body_parts[1])
    {
    var_dump($body_parts[1]);
    }
    }

    最佳答案

    我认为您最好一次走下电子邮件行,因为换行符在电子邮件形成中更为关键。

    你的规则是:

  • 如果你得到一个双换行符,那么正文开始 - 纯文本类型(因为没有标题来指示哪个)。
  • 否则,继续直到获得“边界=”位,然后记录边界并跳入“寻找边界”模式。
  • 然后,当您找到边界时,跳入“寻找内容类型或双换行”模式,并寻找内容类型(并注意内容类型)或双换行(标题已完成,接下来是正文直到下一个边界)
  • 在阅读邮件正文时,您将返回“寻找边界”模式以重复此过程。

  • 我记得很久以前的事情 - 所以以下内容可能不是 100% 准确,但我会提一下以防万一。小心带有附件的文件,因为您可以获得两个“边界”标记。但是一个边界是另一个边界,所以如果你遵循上面的规则(即捕获第一个边界并坚持它),那么你应该没问题。但是用一些附件测试你的脚本:)

    编辑:问题中询问的附加信息。一封电子邮件可以包含用户希望编码的任意数量的“正文”。您可以拥有纯文本和 HTML、UTF 编码版本和 RTF 版本,甚至是摩尔斯电码版本(如果客户端知道如何处理“Content-Type Morse/Code”!)。有时你没有得到纯文本,而只有 HTML 版本(顽皮的用户)。有时 HTML 实际上没有内容类型声明(可能会或可能不会显示为 HTML,具体取决于客户端)。边界也 split 了附件。丰富的测试是 Outlook 的一个陷阱(虽然,公平地说,它通常被转换为 HTML)。所以不,介于 0 和 X 体之间。

    关于php - 使用正则表达式从原始电子邮件中提取正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10616762/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com