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

Php 使用正则表达式从原始电子邮件中提取正文,php,regex,email,Php,Regex,Email,我认为你最好一次一次地写一封电子邮件,因为在电子邮件的形成过程中,换行符更重要 你的规则是: 如果您得到了一个双换行符,那么主体是开始-纯文本类型(因为没有标题来指示哪个) 否则,继续操作直到获得“boundary=”位,然后记录边界并跳入“查找边界”模式 然后,当您找到边界时,跳转到“查找内容类型或双新行”模式,并查找内容类型(和注释内容类型)或双新行(标题已完成,正文在下一个边界之前) 在阅读邮件正文时,您将返回“查找边界”模式以重复该过程 我记得很久以前的事情了——所以下面的内容可能不

我认为你最好一次一次地写一封电子邮件,因为在电子邮件的形成过程中,换行符更重要

你的规则是:

  • 如果您得到了一个双换行符,那么主体是开始-纯文本类型(因为没有标题来指示哪个)
  • 否则,继续操作直到获得“boundary=”位,然后记录边界并跳入“查找边界”模式
  • 然后,当您找到边界时,跳转到“查找内容类型或双新行”模式,并查找内容类型(和注释内容类型)或双新行(标题已完成,正文在下一个边界之前)
  • 在阅读邮件正文时,您将返回“查找边界”模式以重复该过程
我记得很久以前的事情了——所以下面的内容可能不是100%准确,但我会提到以防万一。小心带有附件的文件,因为您可能会得到两个“边界”标记。但是,一个边界与另一个边界是一致的,因此如果你遵循上述规则(即抓住第一个边界并坚持),那么你应该没事。但请使用一些附件测试脚本:)



编辑:问题中询问的其他信息。一封电子邮件可以包含用户希望编码的任意多个“正文”。您可以有一个普通的、HTML的、UTF编码的版本、RTF版本,甚至是摩尔斯电码版本(如果客户知道如何处理“内容类型摩尔斯电码”!)。有时候你不会得到纯文本,而只得到HTML版本(淘气的用户)。有时HTML实际上没有内容类型声明(根据客户机的不同,可能显示为HTML,也可能不显示为HTML)。边界也会拆分附件。Rich test是Outlook中的一个gotcha(不过,公平地说,它通常被转换为HTML)。所以不,在0和X物体之间

我认为你最好一次一封地写电子邮件,因为在电子邮件的形成过程中,分线更为重要

你的规则是:

  • 如果您得到了一个双换行符,那么主体是开始-纯文本类型(因为没有标题来指示哪个)
  • 否则,继续操作直到获得“boundary=”位,然后记录边界并跳入“查找边界”模式
  • 然后,当您找到边界时,跳转到“查找内容类型或双新行”模式,并查找内容类型(和注释内容类型)或双新行(标题已完成,正文在下一个边界之前)
  • 在阅读邮件正文时,您将返回“查找边界”模式以重复该过程
我记得很久以前的事情了——所以下面的内容可能不是100%准确,但我会提到以防万一。小心带有附件的文件,因为您可能会得到两个“边界”标记。但是,一个边界与另一个边界是一致的,因此如果你遵循上述规则(即抓住第一个边界并坚持),那么你应该没事。但请使用一些附件测试脚本:)



编辑:问题中询问的其他信息。一封电子邮件可以包含用户希望编码的任意多个“正文”。您可以有一个普通的、HTML的、UTF编码的版本、RTF版本,甚至是摩尔斯电码版本(如果客户知道如何处理“内容类型摩尔斯电码”!)。有时候你不会得到纯文本,而只得到HTML版本(淘气的用户)。有时HTML实际上没有内容类型声明(根据客户机的不同,可能显示为HTML,也可能不显示为HTML)。边界也会拆分附件。Rich test是Outlook中的一个gotcha(不过,公平地说,它通常被转换为HTML)。所以不,在0和X物体之间

有没有理由不使用imap_fetchbody()之类的工具来获取身体数据?@glenatron email piping?我正在研究如何扩展我的应用程序。你为什么不使用imap_fetchbody()来获取身体数据?@glenatron email piping?我正在做一项关于扩展我的应用程序的研究“我认为你最好一次浏览一次电子邮件行,因为在电子邮件的形成过程中,换行符更为重要。”-对于我试图找到发件人的案例:-我用正则表达式考虑过了。。。一行一行似乎更安全。“我认为你最好一次通过电子邮件,因为在电子邮件形成过程中,换行符更为重要。”-对于我试图找到发件人的案例:-我对RegEx考虑得太多了。。。一行一行似乎更安全。
--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--
    $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]);
            }
        }