Issue When retrieving bodyHTML using partID in Mailcore2

I tried to extract the body of HTML using the following code

MCOIMAPFetchContentOperation * op = [imapsession fetchMessageAttachmentOperationWithFolder:folderName uid:uid partID:partId encoding:MCOEncoding8Bit 

And I got bodyHTML with some unwanted extra code. The html I received for one of the mails

  <div style="padding-bottom: 20px;"></div><div>&lt;!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org= <br/>/TR/xhtml1/DTD/xhtml1-strict.dtd"&gt; <br/>&lt;html xmlns=3D"http://www.w3.org/1999/xhtml"&gt; <br/>&lt;head&gt; <br/>&lt;meta http-equiv=3D"Content-Type" content=3D"text/html; charset=3Dutf-8" /&gt; <br/>&lt;meta name=3D"viewport" content=3D"width=3Ddevice-width" /&gt; <br/>&lt;meta http-equiv=3D"X-UA-Compatible" content=3D"IE=3Dedge" /&gt; <br/>&lt;/head&gt; <br/>&lt;body style=3D"-ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; = <br/>background: #EEEEEE; color: #222222; font-family: 'Open Sans', Arial, sans-= <br/>serif; font-size: 14px; font-weight: normal; line-height: 22px; margin: 0; = <br/>min-width: 100%; padding: 0; text-align: left; width: 100% !important" bgco= <br/>lor=3D"#EEEEEE"&gt;&lt;style type=3D"text/css"&gt; <br/>body { <br/>width: 100% !important; min-width: 100%; -webkit-text-size-adjust: 100%; -m= <br/>s-text-size-adjust: 100%; margin: 0; padding: 0; <br/>} <br/>.ExternalClass { <br/>width: 100%; <br/>} <br/>.ExternalClass { <br/>line-height: 100%; <br/>} <br/>#backgroundTable { <br/>margin: 0; padding: 0; width: 100% !important; line-height: 100% !important= <br/>; <br/>} <br/>img { <br/>outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; widt= <br/>h: auto; max-width: 100%; float: left; clear: both; display: block; <br/>} <br/>body { <br/>color: #222222; font-family: "Open Sans", Arial, sans-serif; font-weight: n= <br/>ormal; padding: 0; margin: 0; text-align: left; line-height: 1.3; <br/>} <br/>body { <br/>font-size: 14px; line-height: 22px; <br/>} <br/>a:hover { <br/>color: #222222 !important; <br/>} 

And I can not display it in the web view. But when I tried to extract the body using the following method

 MCOIMAPFetchContentOperation * opr = [imapsession fetchMessageOperationWithFolder:folderName uid:uid urgent:YES]; 

I got the correct html body and was able to display it in a webview. HTML code that I received for the above method: -

 <div style="padding-bottom: 20px;"></div><div><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content= "text/html; charset=utf-8" /> <meta name="viewport" content="width=device-width" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <title></title> </head> <body style= "-ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; background: #EEEEEE; color: #222222; font-family: 'Open Sans', Arial, sans-serif; font-size: 14px; font-weight: normal; line-height: 22px; margin: 0; min-width: 100%; padding: 0; text-align: left; width: 100% !important" bgcolor="#EEEEEE"> <style type="text/css"> /*<![CDATA[*/ body { width: 100% !important; min-width: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; margin: 0; padding: 0; } .ExternalClass { width: 100%; } .ExternalClass { line-height: 100%; } #backgroundTable { margin: 0; padding: 0; width: 100% !important; line-height: 100% !important; } img { outline: none; text-decoration: none; -ms-interpolation-mode: bicubic; width: auto; max-width: 100%; float: left; clear: both; display: block; } body { color: #222222; font-family: "Open Sans", Arial, sans-serif; font-weight: normal; padding: 0; margin: 0; text-align: left; line-height: 1.3; } body { font-size: 14px; line-height: 22px; } a:hover { color: #222222 !important; } 

Is there any parser or any other way to get the html body. Since I need to use a method using partID to retrieve bodyHTML.

+5
source share
1 answer

The problem was that when retrieving a message using a part, it always used MCOEncoding8Bit for encoding, instead of having to provide the encoding that we get when retrieving the message, as shown below.

 for(MCOAbstractPart *abstractPart in multiAbstractPart.parts) { MCOIMAPPart *part = (MCOIMAPPart *)abstractPart; MCOIMAPFetchContentOperation * op = [imapsession fetchMessageAttachmentOperationWithFolder:folderName uid:uid partID:partId encoding:part.encoding]; } 
+5
source

Source: https://habr.com/ru/post/1233533/


All Articles