imap_fetchbody vs Gmail api get方法

时间:2018-05-04 09:55:53

标签: php encryption imap gmail-api mbox

html imap_fetchbody vs Gmail api GET方法的返回格式不同。

我将电子邮件写入文件,然后重新导入Thunderbird。 imap_fetchbody已写入的电子邮件会被加载到 Thunderbird 中而没有填充问题,而 API 返回的同一封电子邮件会出现填充问题。

我看到的最大区别是 3D

这里有imap_fetchbody的几行:

<html lang=3Den><head><meta content=3D"date=3Dno" name=3D"format-detection"=
><meta content=3D"email=3Dno" name=3D"format-detection"><style>.awl a {colo=
r: #FFFFFF; text-decoration: none;}.abml a {color: #000000; font-family: Ro=
boto-Medium,Helvetica,Arial,sans-serif; font-weight: bold; text-decoration:=
 none;}.adgl a {color: rgba(0, 0, 0, 0.87); text-decoration: none;}.afal a =
{color: #b0b0b0; text-decoration: none;}@media screen and (min-width: 600px=
) {.v2sp {padding: 6px 30px 0px;} .v2rsp {padding: 0px 10px;}}</style></hea=
d>

来自GMAIL api GET方法的几行:

<html lang=en><head><meta content="date=no" name="format-detection"><meta 
 content="email=no" name="format-detection"><style>.awl a {color: #FFFFFF; 
 text-decoration: none;}.abml a {color: #000000; font-family: Roboto-
 Medium,Helvetica,Arial,sans-serif; font-weight: bold; text-decoration: 
 none;}.adgl a {color: rgba(0, 0, 0, 0.87); text-decoration: none;}.afal a 
 {color: #b0b0b0; text-decoration: none;}@media screen and (min-width: 
 600px) {.v2sp {padding: 6px 30px 0px;} .v2rsp {padding: 0px 10px;}}</style> 
 </head>`

虽然Gmail api GET方法返回base64 encode版本,但我将其转换为以下方式:

function decode($data)
{
    return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));
}

两者之间究竟有什么区别,为什么区别呢?

Screen shot of the mail fetched through gmail api

Screen shot of the mail fetched through imap_fetchbody

您的意见和答案将会得到满足。

由于

1 个答案:

答案 0 :(得分:0)

两者之间的区别在于Gmail api GET返回:

  

它是引用的可打印文本,可能是通过“哑”邮件客户端的结果。 =用于编码/转义unprintable /元字符,非常类似于&amp; ...;用于HTML。   = 3d是=的引用可打印表示:3d hex = 61 ascii =等号。

参考:imap_fetchbody HTML with strange chars

虽然base64_encoded方法返回decoded字符串,但需要quoted-printable。我们可以通过以下方式添加相同的quoted_printable_encode($string) 效果:

Sub Reset_Cells()
    With Range("D11,D4,D8")
        .Value = 0
        .NumberFormat = "£#,##0.00"
    End With
End Sub