Php 如何获取gmail电子邮件并将其显示为gmail中显示的内容

Php 如何获取gmail电子邮件并将其显示为gmail中显示的内容,php,Php,我制作了一个程序,使用php从gmail下载电子邮件并保存到html文件。 所有文件都可以正常工作,连接、下载邮件、下载附件、下载嵌入邮件,还可以保存为html文件,所有文件都可以正常工作,但只有一些邮件是这样的: 示例1: --_008_8BDE32B1FDB5C947B54F92503EC9934F015611E6glmrsvrmail1gil_ Content-Type: multipart/alternative; boundary="_000_8BDE32B1FDB5C947B54F9

我制作了一个程序,使用php从gmail下载电子邮件并保存到html文件。 所有文件都可以正常工作,连接、下载邮件、下载附件、下载嵌入邮件,还可以保存为html文件,所有文件都可以正常工作,但只有一些邮件是这样的:

示例1:

--_008_8BDE32B1FDB5C947B54F92503EC9934F015611E6glmrsvrmail1gil_ Content-Type: multipart/alternative; boundary="_000_8BDE32B1FDB5C947B54F92503EC9934F015611E6glmrsvrmail1gil_" --_000_8BDE32B1FDB5C947B54F92503EC9934F015611E6glmrsvrmail1gil_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RGVhciBSb3NlLA0KDQpHcmVldGluZ3MgZnJvbSBHaWxpIExhbmthbmZ1c2hp IE1hbGRpdmVzIQ0KDQpXZSBhcmUgZGVsaWdodGVkIHRvIGNvbmZpcm0geW91 
N§’çè®êßjËZžÌ®(î²ÜžÛh’z0†Œ&¹ÈpŠY\¢Ëf{‰à†+
------_=_NextPart_002_01CE2076.4A2A4F64 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 RGVhciBSb3NlLA0KDQogDQoNClRoaXMgaXMgbXkgb2ZmaWNlIGVtYWlsIGFkZHJlc3MuIEVuY2xv c2VkIGRvY3VtZW50cyBhcyByZXF1aXJlZC4gQWxzbyBlbmNsb3NlZCBteSBjb25maXJtZWQgdGlj a2V0IGZvciB5b3VyIGZ1cnRoZXIgYWN0aW9ucywgcmVxdWVzdCB5b3UgdG8gYXJyYW5nZSBhaXJw 
示例2: 在Gmail中,它以彩色和HTML显示,但在这里,它将以一种类似的方式显示所有文本,但没有HTML和颜色

示例3:

--_008_8BDE32B1FDB5C947B54F92503EC9934F015611E6glmrsvrmail1gil_ Content-Type: multipart/alternative; boundary="_000_8BDE32B1FDB5C947B54F92503EC9934F015611E6glmrsvrmail1gil_" --_000_8BDE32B1FDB5C947B54F92503EC9934F015611E6glmrsvrmail1gil_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RGVhciBSb3NlLA0KDQpHcmVldGluZ3MgZnJvbSBHaWxpIExhbmthbmZ1c2hp IE1hbGRpdmVzIQ0KDQpXZSBhcmUgZGVsaWdodGVkIHRvIGNvbmZpcm0geW91 
N§’çè®êßjËZžÌ®(î²ÜžÛh’z0†Œ&¹ÈpŠY\¢Ëf{‰à†+
------_=_NextPart_002_01CE2076.4A2A4F64 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 RGVhciBSb3NlLA0KDQogDQoNClRoaXMgaXMgbXkgb2ZmaWNlIGVtYWlsIGFkZHJlc3MuIEVuY2xv c2VkIGRvY3VtZW50cyBhcyByZXF1aXJlZC4gQWxzbyBlbmNsb3NlZCBteSBjb25maXJtZWQgdGlj a2V0IGZvciB5b3VyIGZ1cnRoZXIgYWN0aW9ucywgcmVxdWVzdCB5b3UgdG8gYXJyYW5nZSBhaXJw 
示例4:

--_008_8BDE32B1FDB5C947B54F92503EC9934F015611E6glmrsvrmail1gil_ Content-Type: multipart/alternative; boundary="_000_8BDE32B1FDB5C947B54F92503EC9934F015611E6glmrsvrmail1gil_" --_000_8BDE32B1FDB5C947B54F92503EC9934F015611E6glmrsvrmail1gil_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 RGVhciBSb3NlLA0KDQpHcmVldGluZ3MgZnJvbSBHaWxpIExhbmthbmZ1c2hp IE1hbGRpdmVzIQ0KDQpXZSBhcmUgZGVsaWdodGVkIHRvIGNvbmZpcm0geW91 
N§’çè®êßjËZžÌ®(î²ÜžÛh’z0†Œ&¹ÈpŠY\¢Ëf{‰à†+
------_=_NextPart_002_01CE2076.4A2A4F64 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: base64 RGVhciBSb3NlLA0KDQogDQoNClRoaXMgaXMgbXkgb2ZmaWNlIGVtYWlsIGFkZHJlc3MuIEVuY2xv c2VkIGRvY3VtZW50cyBhcyByZXF1aXJlZC4gQWxzbyBlbmNsb3NlZCBteSBjb25maXJtZWQgdGlj a2V0IGZvciB5b3VyIGZ1cnRoZXIgYWN0aW9ucywgcmVxdWVzdCB5b3UgdG8gYXJyYW5nZSBhaXJw 
我用下面的方法下载邮件,请只下载一些邮件 注意:我对附件没有任何问题

function read_all_parts($mbox,$uid)
{
global $mime,$ret_info,$enc;
$mime = array("text","multipart","message","application","audio","image","video","other","unknow");
$enc  = array("7BIT","8BIT","BINARY","BASE64","QUOTED-PRINTABLE","OTHER","base64");
$struct = imap_fetchstructure($mbox, $uid );
$ret_info = array();


$ret_info = $this->scan($struct->parts,0);
return $ret_info;
}

$structure = imap_fetchstructure($mbox, $message_id);
$mailDivided= $mailObj->read_all_parts($mbox,$message_id);

if(count($mailDivided)!=0){
    /* ////////////////////////////////////////////////////////////////////// */
    $plainText = 1;
    foreach ($mailDivided as $key=>$parts)  {
        if($parts['pid']=='1.2' && $parts['encoding']=='QUOTED-PRINTABLE'):
            $plainText = '1.2'; # which means this is contains html text
        endif;

        if($parts['pid']=='1.2' && $parts['encoding']=='7BIT'):
            $plainText = '1.2'; # which means this is contains html text
        endif;

        if($parts['pid']=='1.2' && $parts['encoding']=='8BIT'):
            $plainText = '1.2'; # which means this is contains html text
        endif;

        if($parts['pid']=='1.1.2' && $parts['encoding']=='QUOTED-PRINTABLE'):
            $plainText = '1.1.2'; # which means this is contains html text
        endif;

        if($parts['pid']=='2' && $parts['encoding']=='QUOTED-PRINTABLE'):
            $plainText = '2'; # which means this is contains html text
        endif;
    }
    /* ////////////////////////////////////////////////////////////////////// */        
    $mymail = imap_fetchbody($mbox,$message_id,$plainText);
    if(imap_base64($mymail)){
        print "This is imap_base64 <br>";
        $mymailBody = imap_base64($mymail);
        $mymailBody =  nl2br($mymailBody);

    }else if (imap_qprint($mymail)){
        print "This is imap_qprint <br>";
        $mymailBody = imap_qprint($mymail);

    }else{
        if ($plainTex==1){
            print "This is nl2br <br>";
            $mymailBody =  nl2br($mymail);
        }else{
            print "This is quoted_printable_decode <br>";
            $mymailBody = quoted_printable_decode($mymail);
        }
    }
    /* ////////////////////////////////////////////////////////////////////// */
}else{
    print "This is encodingMailbody <br>";
    $mymail = imap_fetchbody($mbox,$message_id,'1');
    $mymailBody = $mailObj->encodingMailbody($mymail,$structure->encoding);
    $mymailBody = nl2br($mymailBody);
}
函数读取所有部分($mbox,$uid)
{
全球$mime、$ret_info、$enc;
$mime=数组(“文本”、“多部分”、“消息”、“应用程序”、“音频”、“图像”、“视频”、“其他”、“未知”);
$enc=数组(“7BIT”、“8BIT”、“BINARY”、“BASE64”、“QUOTED-PRINTABLE”、“OTHER”、“BASE64”);
$struct=imap_fetchstructure($mbox,$uid);
$ret_info=array();
$ret_info=$this->scan($struct->parts,0);
返回$ret_info;
}
$structure=imap\u fetchstructure($mbox,$message\u id);
$mailDivided=$mailObj->read_all_parts($mbox,$message_id);
如果(计数($mailsdivide)!=0){
/* ////////////////////////////////////////////////////////////////////// */
$plainText=1;
foreach($mailsdivided为$key=>$parts){
如果($parts['pid']=='1.2'&&$parts['encoding']=='QUOTED-PRINTABLE'):
$plainText='1.2';#这意味着它包含html文本
endif;
如果($parts['pid']='1.2'&&$parts['encoding']='7BIT'):
$plainText='1.2';#这意味着它包含html文本
endif;
如果($parts['pid']='1.2'&&$parts['encoding']='8BIT'):
$plainText='1.2';#这意味着它包含html文本
endif;
如果($parts['pid']=='1.1.2'&&$parts['encoding']=='QUOTED-PRINTABLE'):
$plainText='1.1.2';#这意味着它包含html文本
endif;
如果($parts['pid']='2'&&$parts['encoding']=='QUOTED-PRINTABLE'):
$plainText='2';#这意味着它包含html文本
endif;
}
/* ////////////////////////////////////////////////////////////////////// */        
$mymail=imap\u fetchbody($mbox,$message\u id,$plainText);
如果(imap_base64($mymail)){
打印“这是imap_base64
”; $mymailBody=imap_base64($mymail); $mymailBody=nl2br($mymailBody); }else if(imap_qprint($mymail)){ 打印“这是imap_打印
”; $mymailBody=imap\u qprint($mymail); }否则{ 如果($plainTex==1){ 打印“这是nl2br
”; $mymailBody=nl2br($mymail); }否则{ 打印“这是引用的\u可打印\u解码
”; $mymailBody=quoted\u printable\u decode($mymail); } } /* ////////////////////////////////////////////////////////////////////// */ }否则{ 打印“这是encodingMailbody
”; $mymail=imap_fetchbody($mbox,$message_id,'1'); $mymailBody=$mailObj->encodingMailbody($mymail,$structure->encoding); $mymailBody=nl2br($mymailBody); }

我一直在检查和尝试所有可能的事情,没有任何东西对我有帮助。

断开的电子邮件和不断开的电子邮件有什么共同之处吗?乍一看,角色集可能不同

相关帖子如下:


此外,我会尝试查看电子邮件标题,看看它们是否格式不同,因为不同的发件人对电子邮件标题的结构不同。

可能是因为颜色不是在HTML中定义的,而是在外部样式表中定义的?@yvytty这是我制作的一个酒店预订系统,很多工作人员都会使用这个,我不想给gmail,它将无法控制。2.它就像一个tiket系统,系统会识别,当一封电子邮件被恢复时,它会用电子邮件更新客户档案,这样员工就可以检查待处理的邮件。3.我真的不明白outlook和其他脱机程序是如何显示邮件的nicely@yvytty好的,让我详细解释;-)作为一家拥有200名员工的旅游公司,管理层无法监控这200名员工在与客户沟通时的情况。因此,系统只使用1个电子邮件地址,客户永远不会收到员工的个人电子邮件,他们没有,我们也不会给出个人电子邮件地址。当工作人员发送邮件时,它将从xxx@company.com客人也会回复xxx@company.com我的软件所做的是识别客户abc先生属于员工xyz小姐。@yvytty,因此管理层现在知道xyz小姐必须回复abc先生,管理层和其他员工将知道发生了什么。所有工作人员都将有单独的用户名和密码,以便后端登录。这就是我们的想法,系统现在已经启动,运行良好。现在唯一的问题是一些电子邮件格式不好。另一件重要的事情是,他们使用内部服务器,速度非常快;-)。为什么不使用票务系统呢?对不起,我一直在尝试所有这些都不起作用,看起来我的问题没有答案