【问题标题】:Link getting malformed while parsing email解析电子邮件时链接格式错误
【发布时间】:2022-11-30 11:13:55
【问题描述】:

我从 Gmail API 获取完整格式的电子邮件,然后以字符串格式解析它,以便我可以从中提取相关链接。在官方 Gmail 网站上查看电子邮件时,如果我检查按钮上的元素,我感兴趣的重定向链接看起来像这样。

<p style="margin-top:0px;margin-bottom:20px;font-family:Arial"> 


<a href="http://delivery.ncp.flipkart.com/HCIPJTENG?id=88656=ehkDAAoOVwYCTFZTVwMNCQoAXQdTAFYBVAJVDgQFVgBfUAIHBQVXBAUCAANWAlxYUFRFAgAAA1EEUgQPBAcBDgpXUlJXBgQHDFEHUldSXVsBW1oDVAAHBQIJBEsFBFYODFACBAQDWAYBBQFUWkhQTUYTAxoaUABeW0cERU0cDVRJS1VcW0YKUkZEGgYMWRdxcSppf2FxK3UNWAVLQgE=&fl=URFHQAgZTl8aVlgME19ZS0ZNWlpYGxEdUV0IVF8dVW9NFVZzR0cCeVUFBAAMXFlzZRAOTX9XDFxReQZcdkcuQlE1cVwHYih5UGcMPA5iaVdtCFxeDF4xVXpYDnINBxNAUxZsaWR8A0BbX2sRIlYIch8HQGBTQiZwAUQrdgdKLUdQBll8BlRQcQFHGTIBTVpACy9zYFdtF2EGYztbVlNVZE5VRklmaRdCfgJYAQlzS09HVVtMfgQOeWgECQZbZFB1ABxJBH5bBgRsfX49IG5pDx8mUlN9TVUAd0I1D1VfLFkAEF5mfU5TSgd6GSkXWlZOHwVNBWZ5ImB2YxF2UFgGW3IQd3YFeRsDdVZtASd1SXNIF1IYW2VRbWdUEFsBdhlvWFNwd0QPGWxDYWNdPGdZc1gMSltjYhxAR0EgYGZdNXRvIwpdWAYHaVV7TApXTHNRYTJMGGNBEQZFcjYEZ0oiQUgBW3EDRwV+fEhNHDNtdHUKD0kDQAcLV0djL21WcAVmYzp1e0B8IlxHcgIIMVN9f2YpbkNTAjYDBwQqYUcFNgdeNVxcYhsAZH1FDT0QUm4BBVVLdmFbFV5KZzgBeVwAY00gckh+UAJceEAZOgxfekBLB29TBm4uVFV1C1J1CxoaSgQBcUFnKgdHCH83U18BUQsGDVlhTl1EbXIbZ25VEVhXDVBlW1MQVnBnTTE7QV4LXCFYdn91I1ZrBBlEekcODgoGQ0MLGxFgbH5+KjdVXm9TM2hMBUUABR8GBntDdAVoZhZpckdaJn11dkMiIVENfwIVSwdDBVV2fWlZcQRgGlNyB0FdfEQRYAZxegwyf1paZStrB1gGInheUzJ6a10hBgwpdUBBeg0LDA0=&ext=ZT10cnVl" style="background-color:rgb(41,121,251);font-family:Arial;color:#fff;border:0px;font-size:14px;display:inline-block;margin-top:0px;border-radius:2px;text-decoration:none;width:160px;line-height:32px;text-align:center" target="_blank" data-saferedirecturl="https://www.google.com/url?q=http://delivery.ncp.flipkart.com/HCIPJTENG?id%3D88656%3DehkDAAoOVwYCTFZTVwMNCQoAXQdTAFYBVAJVDgQFVgBfUAIHBQVXBAUCAANWAlxYUFRFAgAAA1EEUgQPBAcBDgpXUlJXBgQHDFEHUldSXVsBW1oDVAAHBQIJBEsFBFYODFACBAQDWAYBBQFUWkhQTUYTAxoaUABeW0cERU0cDVRJS1VcW0YKUkZEGgYMWRdxcSppf2FxK3UNWAVLQgE%3D%26fl%3DURFHQAgZTl8aVlgME19ZS0ZNWlpYGxEdUV0IVF8dVW9NFVZzR0cCeVUFBAAMXFlzZRAOTX9XDFxReQZcdkcuQlE1cVwHYih5UGcMPA5iaVdtCFxeDF4xVXpYDnINBxNAUxZsaWR8A0BbX2sRIlYIch8HQGBTQiZwAUQrdgdKLUdQBll8BlRQcQFHGTIBTVpACy9zYFdtF2EGYztbVlNVZE5VRklmaRdCfgJYAQlzS09HVVtMfgQOeWgECQZbZFB1ABxJBH5bBgRsfX49IG5pDx8mUlN9TVUAd0I1D1VfLFkAEF5mfU5TSgd6GSkXWlZOHwVNBWZ5ImB2YxF2UFgGW3IQd3YFeRsDdVZtASd1SXNIF1IYW2VRbWdUEFsBdhlvWFNwd0QPGWxDYWNdPGdZc1gMSltjYhxAR0EgYGZdNXRvIwpdWAYHaVV7TApXTHNRYTJMGGNBEQZFcjYEZ0oiQUgBW3EDRwV%2BfEhNHDNtdHUKD0kDQAcLV0djL21WcAVmYzp1e0B8IlxHcgIIMVN9f2YpbkNTAjYDBwQqYUcFNgdeNVxcYhsAZH1FDT0QUm4BBVVLdmFbFV5KZzgBeVwAY00gckh%2BUAJceEAZOgxfekBLB29TBm4uVFV1C1J1CxoaSgQBcUFnKgdHCH83U18BUQsGDVlhTl1EbXIbZ25VEVhXDVBlW1MQVnBnTTE7QV4LXCFYdn91I1ZrBBlEekcODgoGQ0MLGxFgbH5%2BKjdVXm9TM2hMBUUABR8GBntDdAVoZhZpckdaJn11dkMiIVENfwIVSwdDBVV2fWlZcQRgGlNyB0FdfEQRYAZxegwyf1paZStrB1gGInheUzJ6a10hBgwpdUBBeg0LDA0%3D%26ext%3DZT10cnVl&source=gmail&ust=1669470586360000&usg=AOvVaw2TGtpbQMv9Nx4CsQgYUmpZ">


</p>

但是当我解析电子邮件时,链接格式不正确。 我在解析电子邮件时得到的链接是这个

http://delivery.ncp.flipkart.com/HCIPJTENG?id=88656=ehkDAAoOVwYCTFdSUQZZXwZVCAJQUlIBBghXDgxQBlUBVwQDVwFXA1EAAl1RBF0OClRFAgAAA1EEUgQPBAcBDgpXUlJXBgQHDFEHUldSXVsBW1oDVAAHBQIJBEsFBFYODFACBAQDWAYBBQFUWkhQTUYTAxoaUABeW0cERU0cDVRJS1VcW0YKUkZEGgYMWRdxcSppf2FxK3UNWAVLQgE=&amp;fl=URFHQAgZTl8aVlgME19ZS0ZNWlpYGxEdUV0IVF8dClhsAUF8fWAUB1ZRVhwlTFBDQisOYl5dOlhQew5UXVZWVHcLW2p+YQoFewJsLTVRe2gALm0AQWVdQ3FnAkMCWC1xaQB0dB9GE1BefFUyOVZBSXQmDldwbTQGamQOAUZoJwFxJFRJdm8EUWxjWzRWe012eyJ6ZHwBBn1lUDhFY2IWXVRXWUpeeSJpcXdcHS8ZfVcHAXVmUVlcSHxzKFpVcQVjDi9HX1oDGwtnXnpRBnFbSUo0SnB7XipXfEMLR1dHVhptBkleC2EFAENGbiATfWF7czN3d3cEXQcLfgpoeWgqVQpcQ0hfXExwUGoMCAFADHdhF3tHR2UwQ2FWKGNfdBVbQTQeYndyKGpQeV0cOnZ0e0BRaHtHZ1BDR2QYVQ1qWnR6FkdWWQMOcQBWTDIWA3VyBjtLY1FwEH94YxZlbmEzD08OfEVRcxR0UgF7KwFXbWZeLAteA202SGRWBl9VfQV+XVVCRnt1JEV6CV0GGmdBU3k2dwNyZRR/Y3IQTVF0EHRUEHFkWxswUUVJYAcSeVlzACZPd3BVUllGAlVNAgAoAU0VWAVibjIEXQh4URlwUGhHBwx7U1wCXVFTFXECHw==&amp;ext=ZT10cnVl

从 Gmail API 以完整格式获取电子邮件时,我正在使用此逻辑对电子邮件进行解码 `

private fun getTextFromBodyPart(
    bodyPart: MessagePart
): String {

    var result: String = ""
    if (bodyPart.mimeType == "text/plain") {
        val r = bodyPart.body.decodeData()
        result = r.toString(Charsets.UTF_8)
    } else if (bodyPart.mimeType == "text/html") {
        val html = bodyPart.body.decodeData()
        result = html.toString(Charsets.UTF_8)
    }
    return result
}

和这个

   val emailSize = email.payload.parts.size
var parsedEmail = " "

for (k in 0 until emailSize) {
    parsedEmail += getTextFromBodyPart(email.payload.parts[k])
}

然后我使用正则表达式从电子邮件中提取链接,我使用的正则表达式是这个 ^http:\/\/delivery\..+?\.flipkart\.com\/([A-Za-z0-9\?\=&amp;\/\\\+]+)$

此外,当我分析解码后的电子邮件时,一切似乎都很好,期待链接。 即使我在 Gmail 官方网站上点击查看这封电子邮件的原件,链接也是格式错误的。

无法真正理解为什么链接格式错误。

我还尝试使用 Gmail Api 获取原始格式的电子邮件,但链接在解码后再次出现格式错误。

【问题讨论】:

    标签: android kotlin encoding gmail-api decoding


    【解决方案1】:

    根据您通过检查下方 Gmail 应用程序中的按钮发布的内容,电子邮件中的链接格式不正确。 88656=ehkD...应该是88656%3DehkD...

    <a href="http://delivery.ncp.flipkart.com/HCIPJTENG?id=88656=ehkD...
    

    看起来 id 查询参数是某种类型的令牌,尚未正确转义。

    您可能有一种方法可以解决此问题,方法是手动匹配提取 id 和其他查询参数,然后使用正确编码的 url 进行重建。

    【讨论】:

      猜你喜欢
      • 2019-06-27
      • 2011-07-15
      • 1970-01-01
      • 2018-09-09
      • 1970-01-01
      • 2014-07-18
      • 1970-01-01
      • 2019-11-21
      • 1970-01-01
      相关资源
      最近更新 更多