Interpret and display different Encodings for email bodies in ruby: -


i using email gem in rails app encountering problems encoding:

i working on mail presents way:

.... message-id: <22d41f1a16cd5a5719309a96f8c95d50@vcrfnyjsz> from: "=?utf-8?b?iowfqowbvealvowhpowfvoibjowwj+wnkos/oeabrw==?=" <info@nks-media.ru> to: ... ... mime-version: 1.0 content-type: text/html;     charset="utf-8" content-transfer-encoding: base64 x-priority: 5 x-msmail-priority: low x-mailer: microsoft outlook express 6.00.2900.5512 x-mimeole: produced microsoft mimeole v6.00.2900.5512  pcfet0nuwvbfiehutuwgufvcteldicitly9xm0mvl0rurcbive1midqumcbucmfuc2l0aw9uywwv l0voij4ncjxive1mihhtbg5zom8gpsaidxjuonnjagvtyxmtbwljcm9zb2z0lwnvbtpvzmzpy2u6 b2zmawnlij48sevbrd4ncjxnrvrbignvbnrlbnq9inrlehqvahrtbdsgy2hhcnnldd11dgytocig ahr0cc1lcxvpdj1db250zw50lvr5cgu+dqo8tuvuqsbuyw1lpudftkvsqvrpuibjb250zw50psjn u0hutuwgoc4wmc42mdaxljizntg4ij48l0hfquq+dqo8qk9ewsbiz0nvbg9ypwfxdwe+dqo8ud48 rk9ovcbjb2xvcj1ncmf5ihnpemu9nj7lhajlm73lsi/lp5dkv6hmga/vvizlrabnlj/lprnkv6hm ga/vvizmpbzlh6tlhbzogyzlpbpvvizoia/lrrbkv6hmga/vvizlhbzogyzkv6hmga/vvizlpkfk v53lgaxkv6hmga88l0zptlq+pc9qpg0kpfa+pezptlqgc3r5bgu9ikjbq0thuk9vtkqtq09mt1i6 icmwmgzmzmyiignvbg9ypsmwmgzmzmygc2l6zt02pjxbia0kahjlzj0iahr0cdovl3d3dy5obmhu lmnsdwivegluegkuahrtij5odgh0dha6ly93d3cuag5obi5jbhvil3hpbnhplmh0bwh0dha6ly93 d3cuag5obi5jbhvil3hpbnhplmh0btwvqt48l0zptlq+pc9qpg0kpfa+pezptlqgc3r5bgu9ikjb q0thuk9vtkqtq09mt1i6icmwmgzmzmyiignvbg9ypsmwmgzmzmygdqpzaxplpty+pc9gt05upizu ynnwozwvud4ncjxqpjxgt05uignvbg9ypsm4mdgwodagc2l6zt02pjxgt05uihnpemu9nj48rk9o vcbzdhlszt0iqkfds0dst1vorc1dt0xpujogyxf1ysigdqpjb2xvcj1hcxvhpus6uuwpr+s7peak oui1sos7luwur+s4goads+imgeeahowls+s6uu+8jowluewpquidvewxnus6jus7luoagjwvrk9o vd48l1a+dqo8ud48rk9ovcbzaxplpty+pezptlqgc3r5bgu9ikjbq0thuk9vtkqtq09mt1i6igfx dweiia0ky29sb3i9yxf1yt7jgidjgidmlrnnk7fpl63kuirnnlzmt7hlkljkuobkuidlj6pmsjtv viznhlblki7lsiblpbnnmotmlbtkukrohljln4vlnkjog7jliy3jgilku5bojqvmiy7nibnnmotv vizov5nkukrlppblrb3vvihnm7tmjqxpl7fmrbvlvpfkuobvvie8l0zptlq+pc9qpg0kpfa+pezp tlqgc2l6zt02pjxgt05uihn0ewxlpsjcqunlr1jpvu5elunpte9soibhcxvhiiancmnvbg9ypwfx dwe+icagicagicdmuixmup/mijhnn6xpgzpvvizmmk/pgqplj6rlrp7lipvlubplubpnmotohb7o m4fvviznqybojbvlj4jmmk/osihllyrvvj/mmk/ku5blki7mnaxmllbmni3nmotlppbprztlkjfv vj88l0zptlq+pc9qpg0kpfa+pezptlqgc2l6zt02pjxgt05uihn0ewxlpsjcqunlr1jpvu5elunp te9soibhcxvhiiancmnvbg9ypwfxdwe+icagiowfrembk+wytoinkua1ruwhuus4goakueivoew8 gumytoajrueahoeskeaej++8mukanoanheegtowkqeoagukantwvrk9ovd48l1a+dqo8ud48rk9o vcbzaxplpty+pezptlqgc3r5bgu9ikjbq0thuk9vtkqtq09mt1i6igfxdweiia0ky29sb3i9yxf1 yt4gicag4occ6ykj5aw55oco5lmi5lya6zsz5lqg6zeo77yf5pei54s25pyj5lia77ym5oir5oco 5lmi6io95lin6k6k5li66l+y5lya5pyj5lqm77yf5aac5p6c5oir6k+05l2g546w5zyo5q2j5ase 5lqo5as06isr5re35lmx77ym5ocd6lev5lin5rif55qe54q25ocb5lin6l+h5yig5zcn77yf4ocd 5bm06l275rcr6k2m6zeu55m95li977ym55m95li954k55as05om/6k6k44ccpc9gt05upjwvud4n cjxqpjxgt05uihnpemu9nj48rk9ovcbzdhlszt0iqkfds0dst1vorc1dt0xpujogyxf1ysigdqpj b2xvcj1hcxvhpiagicdmnpfljzfmnkzlslhmmk/nm5fnlkjkuoblki7kurrnmotnn6xor4bvvizm iydku6xkuz/msqhku4dkuyjlj6/pqotlgrlnmotvvizkvr/nrjhnnydku6tkvjfkurrlubpouqvv vizlj4jlr7npry/lvohpl67pgzpvvjrigjzpry/ljb/lrrblnkjmnj3loilkuyvkuirkujppl67m ratkuovvvizmg7pmnaxlv4xmmk/mninku4dkuyjmt7hmhi/nvalvvj/igj08l0zptlq+pc9qpg0k pfa+pezptlqgc3r5bgu9ikjbq0thuk9vtkqtq09mt1i6igfxdweiignvbg9ypwfxdwegdqpzaxpl pty+44ca44capc9gt05upjwvud48l0zptlq+pc9gt05upjwvrk9ovd48l0zptlq+pc9gt05upjwv rk9ovd48l0zptlq+pc9ct0rzpjwvsfrntd4ncg== 

(i have omitted not inherent parts)

i fetch net::imap class of ruby pass string the

email.read_from_string  

method of gem.

it return me object, call msg. call msg.body , have answer:

<mail::body:0x007f0045976ea8 @boundary=nil, @preamble=nil, @epilogue=nil, @charset="us-ascii", @part_sort_order=["text/plain", "text/enriched", "text/html"], @parts=[], @raw_source="pcfet0nuwvbfiehutuwgufvcteldicitly9xm0mvl0rurcbive1midqumcbucmfuc2l0aw9uywwv\r\nl0voij4ncjxive1mihhtbg5zom8gpsaidxjuonnjagvtyxmtbwljcm9zb2z0lwnvbtpvzmzpy2u6\r\nb2zmawnlij48sevbrd4ncjxnrvrbignvbnrlbnq9inrlehqvahrtbdsgy2hhcnnldd11dgytocig\r\nahr0cc1lcxvpdj1db250zw50lvr5cgu+dqo8tuvuqsbuyw1lpudftkvsqvrpuibjb250zw50psjn\r\nu0hutuwgoc4wmc42mdaxljizntg4ij48l0hfquq+dqo8qk9ewsbiz0nvbg9ypwfxdwe+dqo8ud48\r\nrk9ovcbjb2xvcj1ncmf5ihnpemu9nj7lhajlm73lsi/lp5dkv6hmga/vvizlrabnlj/lprnkv6hm\r\nga/vvizmpbzlh6tlhbzogyzlpbpvvizoia/lrrbkv6hmga/vvizlhbzogyzkv6hmga/vvizlpkfk\r\nv53lgaxkv6hmga88l0zptlq+pc9qpg0kpfa+pezptlqgc3r5bgu9ikjbq0thuk9vtkqtq09mt1i6\r\nicmwmgzmzmyiignvbg9ypsmwmgzmzmygc2l6zt02pjxbia0kahjlzj0iahr0cdovl3d3dy5obmhu\r\nlmnsdwivegluegkuahrtij5odgh0dha6ly93d3cuag5obi5jbhvil3hpbnhplmh0bwh0dha6ly93\r\nd3cuag5obi5jbhvil3hpbnhplmh0btwvqt48l0zptlq+pc9qpg0kpfa+pezptlqgc3r5bgu9ikjb\r\nq0thuk9vtkqtq09mt1i6icmwmgzmzmyiignvbg9ypsmwmgzmzmygdqpzaxplpty+pc9gt05upizu\r\nynnwozwvud4ncjxqpjxgt05uignvbg9ypsm4mdgwodagc2l6zt02pjxgt05uihnpemu9nj48rk9o\r\nvcbzdhlszt0iqkfds0dst1vorc1dt0xpujogyxf1ysigdqpjb2xvcj1hcxvhpus6uuwpr+s7peak\r\noui1sos7luwur+s4goads+imgeeahowls+s6uu+8jowluewpquidvewxnus6jus7luoagjwvrk9o\r\nvd48l1a+dqo8ud48rk9ovcbzaxplpty+pezptlqgc3r5bgu9ikjbq0thuk9vtkqtq09mt1i6igfx\r\ndweiia0ky29sb3i9yxf1yt7jgidjgidmlrnnk7fpl63kuirnnlzmt7hlkljkuobkuidlj6pmsjtv\r\nviznhlblki7lsiblpbnnmotmlbtkukrohljln4vlnkjog7jliy3jgilku5bojqvmiy7nibnnmotv\r\nvizov5nkukrlppblrb3vvihnm7tmjqxpl7fmrbvlvpfkuobvvie8l0zptlq+pc9qpg0kpfa+pezp\r\ntlqgc2l6zt02pjxgt05uihn0ewxlpsjcqunlr1jpvu5elunpte9soibhcxvhiiancmnvbg9ypwfx\r\ndwe+icagicagicdmuixmup/mijhnn6xpgzpvvizmmk/pgqplj6rlrp7lipvlubplubpnmotohb7o\r\nm4fvviznqybojbvlj4jmmk/osihllyrvvj/mmk/ku5blki7mnaxmllbmni3nmotlppbprztlkjfv\r\nvj88l0zptlq+pc9qpg0kpfa+pezptlqgc2l6zt02pjxgt05uihn0ewxlpsjcqunlr1jpvu5elunp\r\nte9soibhcxvhiiancmnvbg9ypwfxdwe+icagiowfrembk+wytoinkua1ruwhuus4goakueivoew8\r\ngumytoajrueahoeskeaej++8mukanoanheegtowkqeoagukantwvrk9ovd48l1a+dqo8ud48rk9o\r\nvcbzaxplpty+pezptlqgc3r5bgu9ikjbq0thuk9vtkqtq09mt1i6igfxdweiia0ky29sb3i9yxf1\r\nyt4gicag4occ6ykj5aw55oco5lmi5lya6zsz5lqg6zeo77yf5pei54s25pyj5lia77ym5oir5oco\r\n5lmi6io95lin6k6k5li66l+y5lya5pyj5lqm77yf5aac5p6c5oir6k+05l2g546w5zyo5q2j5ase\r\n5lqo5as06isr5re35lmx77ym5ocd6lev5lin5rif55qe54q25ocb5lin6l+h5yig5zcn77yf4ocd\r\n5bm06l275rcr6k2m6zeu55m95li977ym55m95li954k55as05om/6k6k44ccpc9gt05upjwvud4n\r\ncjxqpjxgt05uihnpemu9nj48rk9ovcbzdhlszt0iqkfds0dst1vorc1dt0xpujogyxf1ysigdqpj\r\nb2xvcj1hcxvhpiagicdmnpfljzfmnkzlslhmmk/nm5fnlkjkuoblki7kurrnmotnn6xor4bvvizm\r\niydku6xkuz/msqhku4dkuyjlj6/pqotlgrlnmotvvizkvr/nrjhnnydku6tkvjfkurrlubpouqvv\r\nvizlj4jlr7npry/lvohpl67pgzpvvjrigjzpry/ljb/lrrblnkjmnj3loilkuyvkuirkujppl67m\r\nratkuovvvizmg7pmnaxlv4xmmk/mninku4dkuyjmt7hmhi/nvalvvj/igj08l0zptlq+pc9qpg0k\r\npfa+pezptlqgc3r5bgu9ikjbq0thuk9vtkqtq09mt1i6igfxdweiignvbg9ypwfxdwegdqpzaxpl\r\npty+44ca44capc9gt05upjwvud48l0zptlq+pc9gt05upjwvrk9ovd48l0zptlq+pc9gt05upjwv\r\nrk9ovd48l0zptlq+pc9ct0rzpjwvsfrntd4ncg==\r\n\r\n\r\n", @encoding="base64"> 

so seems right.

i do:

msg.body.encoding # return "base64" 

and right again, here strange, when do:

msg.body.only_us_ascii? # return true 

should not false? content type in header of email 'utf-8'. in fact, if try

msg.body.decoded 

here is:

"<!doctype html public \"-//w3c//dtd html 4.0 transitional//en\">\r\n<html xmlns:o = \"urn:schemas-microsoft-com:office:office\"><head>\r\n<meta content=\"text/html; charset=utf-8\" http-equiv=content-type>\r\n<meta name=generator content=\"mshtml 8.00.6001.23588\"></head>\r\n<body bgcolor=aqua>\r\n<p><font color=gray size=6>\xe5\x85\xa8\xe5\x9b\xbd\xe5\xb0\x8f\xe5\xa7\x90\xe4\xbf\xa1\xe6\x81\xaf\xef\xbc\x8c\xe5\xad\xa6\xe7\x94\x9f\xe5\xa6\xb9\xe4\xbf\xa1\xe6\x81\xaf\xef\xbc\x8c\xe6\xa5\xbc\xe5\x87\xa4\xe5\x85\xbc\xe8\x81\x8c\xe5\xa5\xb3\xef\xbc\x8c\xe8\x89\xaf\xe5\xae\xb6\xe4\xbf\xa1\xe6\x81\xaf\xef\xbc\x8c\xe5\x85\xbc\xe8\x81\x8c\xe4\xbf\xa1\xe6\x81\xaf\xef\xbc\x8c\xe5\xa4\xa7\xe4\xbf\x9d\xe5\x81\xa5\xe4\xbf\xa1\xe6\x81\xaf</font></p>\r\n<p><font style=\"background-color: #00ffff\" color=#00ffff size=6><a \r\nhref=\"http://www.hnhn.club/xinxi.htm\">hthttp://www.hnhn.club/xinxi.htmhttp://www.hnhn.club/xinxi.htm</a></font></p>\r\n<p><font style=\"background-color: #00ffff\" color=#00ffff \r\nsize=6></font>&nbsp;</p>\r\n<p><font color=#808080 size=6><font size=6><font style=\"background-color: aqua\" \r\ncolor=aqua>\xe4\xba\xba\xe5\x8f\xaf\xe4\xbb\xa5\xe6\x8a\xa2\xe8\xb5\xb0\xe4\xbb\x96\xe5\x94\xaf\xe4\xb8\x80\xe6\x83\xb3\xe8\xa6\x81\xe7\x9a\x84\xe5\xa5\xb3\xe4\xba\xba\xef\xbc\x8c\xe5\xa5\xb9\xe5\x8f\xaa\xe8\x83\xbd\xe5\xb1\x9e\xe4\xba\x8e\xe4\xbb\x96\xe3\x80\x82</font></p>\r\n<p><font size=6><font style=\"background-color: aqua\" \r\ncolor=aqua>\xe3\x80\x80\xe3\x80\x80\xe6\x96\xb9\xe7\x93\xb7\xe9\x97\xad\xe4\xb8\x8a\xe7\x9c\xbc\xe6\xb7\xb1\xe5\x90\xb8\xe4\xba\x86\xe4\xb8\x80\xe5\x8f\xa3\xe6\xb0\x94\xef\xbc\x8c\xe7\x84\xb6\xe5\x90\x8e\xe5\xb0\x86\xe5\xa5\xb9\xe7\x9a\x84\xe6\x95\xb4\xe4\xb8\xaa\xe8\x84\xb8\xe5\x9f\x8b\xe5\x9c\xa8\xe8\x83\xb8\xe5\x89\x8d\xe3\x80\x82\xe4\xbb\x96\xe8\x8e\xab\xe6\x89\x8e\xe7\x89\xb9\xe7\x9a\x84\xef\xbc\x8c\xe8\xbf\x99\xe4\xb8\xaa\xe5\xa6\x96\xe5\xad\xbd\xef\xbc\x81\xe7\x9b\xb4\xe6\x8e\xa5\xe9\x97\xb7\xe6\xad\xbb\xe5\xbe\x97\xe4\xba\x86\xef\xbc\x81</font></p>\r\n<p><font size=6><font style=\"background-color: aqua\" \r\ncolor=aqua>        \xe6\xb8\x85\xe6\xba\x9f\xe6\x88\x91\xe7\x9f\xa5\xe9\x81\x93\xef\xbc\x8c\xe6\x98\xaf\xe9\x82\xa3\xe5\x8f\xaa\xe5\xae\x9e\xe5\x8a\x9b\xe5\xb9\xb3\xe5\xb9\xb3\xe7\x9a\x84\xe8\x85\xbe\xe8\x9b\x87\xef\xbc\x8c\xe7\xa9\x86\xe8\x8d\xbb\xe5\x8f\x88\xe6\x98\xaf\xe8\xb0\x81\xe5\x95\x8a\xef\xbc\x9f\xe6\x98\xaf\xe4\xbb\x96\xe5\x90\x8e\xe6\x9d\xa5\xe6\x94\xb6\xe6\x9c\x8d\xe7\x9a\x84\xe5\xa6\x96\xe9\xad\x94\xe5\x90\x97\xef\xbc\x9f</font></p>\r\n<p><font size=6><font style=\"background-color: aqua\" \r\ncolor=aqua>    \xe5\x85\xad\xe9\x81\x93\xe5\x98\xb4\xe8\xa7\x92\xe6\xb5\xae\xe5\x87\xba\xe4\xb8\x80\xe6\x8a\xb9\xe8\xaf\xa1\xe5\xbc\x82\xe9\x98\xb4\xe6\xa3\xae\xe7\x9a\x84\xe7\xac\x91\xe6\x84\x8f\xef\xbc\x9a\xe2\x80\x9c\xe6\x8d\x85\xe7\xa0\xb4\xe5\xa4\xa9\xe3\x80\x82\xe2\x80\x9d</font></p>\r\n<p><font size=6><font style=\"background-color: aqua\" \r\ncolor=aqua>    \xe2\x80\x9c\xe9\x82\xa3\xe5\xa5\xb9\xe6\x80\x8e\xe4\xb9\x88\xe4\xbc\x9a\xe9\x94\x99\xe4\xba\x86\xe9\x97\xa8\xef\xbc\x9f\xe6\x97\xa2\xe7\x84\xb6\xe6\x9c\x89\xe4\xb8\x80\xef\xbc\x8c\xe6\x88\x91\xe6\x80\x8e\xe4\xb9\x88\xe8\x83\xbd\xe4\xb8\x8d\xe8\xae\xa4\xe4\xb8\xba\xe8\xbf\x98\xe4\xbc\x9a\xe6\x9c\x89\xe4\xba\x8c\xef\xbc\x9f\xe5\xa6\x82\xe6\x9e\x9c\xe6\x88\x91\xe8\xaf\xb4\xe4\xbd\xa0\xe7\x8e\xb0\xe5\x9c\xa8\xe6\xad\xa3\xe5\xa4\x84\xe4\xba\x8e\xe5\xa4\xb4\xe8\x84\x91\xe6\xb7\xb7\xe4\xb9\xb1\xef\xbc\x8c\xe6\x80\x9d\xe8\xb7\xaf\xe4\xb8\x8d\xe6\xb8\x85\xe7\x9a\x84\xe7\x8a\xb6\xe6\x80\x81\xe4\xb8\x8d\xe8\xbf\x87\xe5\x88\x86\xe5\x90\xa7\xef\xbc\x9f\xe2\x80\x9d\xe5\xb9\xb4\xe8\xbd\xbb\xe6\xb0\x91\xe8\xad\xa6\xe9\x97\xae\xe7\x99\xbd\xe4\xb8\xbd\xef\xbc\x8c\xe7\x99\xbd\xe4\xb8\xbd\xe7\x82\xb9\xe5\xa4\xb4\xe6\x89\xbf\xe8\xae\xa4\xe3\x80\x82</font></p>\r\n<p><font size=6><font style=\"background-color: aqua\" \r\ncolor=aqua>    \xe6\x9e\x97\xe5\x8d\x97\xe6\x9c\xac\xe5\xb0\xb1\xe6\x98\xaf\xe7\x9b\x97\xe7\x94\xa8\xe4\xba\x86\xe5\x90\x8e\xe4\xba\xba\xe7\x9a\x84\xe7\x9f\xa5\xe8\xaf\x86\xef\xbc\x8c\xe6\x89\x80\xe4\xbb\xa5\xe4\xb9\x9f\xe6\xb2\xa1\xe4\xbb\x80\xe4\xb9\x88\xe5\x8f\xaf\xe9\xaa\x84\xe5\x82\xb2\xe7\x9a\x84\xef\xbc\x8c\xe4\xbe\xbf\xe7\xac\x91\xe7\x9d\x80\xe4\xbb\xa4\xe4\xbc\x97\xe4\xba\xba\xe5\xb9\xb3\xe8\xba\xab\xef\xbc\x8c\xe5\x8f\x88\xe5\xaf\xb9\xe9\xad\x8f\xe5\xbe\x81\xe9\x97\xae\xe9\x81\x93\xef\xbc\x9a\xe2\x80\x9c\xe9\xad\x8f\xe5\x8d\xbf\xe5\xae\xb6\xe5\x9c\xa8\xe6\x9c\x9d\xe5\xa0\x82\xe4\xb9\x8b\xe4\xb8\x8a\xe4\xb8\x93\xe9\x97\xae\xe6\xad\xa4\xe4\xba\x8b\xef\xbc\x8c\xe6\x83\xb3\xe6\x9d\xa5\xe5\xbf\x85\xe6\x98\xaf\xe6\x9c\x89\xe4\xbb\x80\xe4\xb9\x88\xe6\xb7\xb1\xe6\x84\x8f\xe7\xbd\xa2\xef\xbc\x9f\xe2\x80\x9d</font></p>\r\n<p><font style=\"background-color: aqua\" color=aqua \r\nsize=6>\xe3\x80\x80\xe3\x80\x80</font></p></font></font></font></font></font></font></font></body></html>\r\n" 

not utf-8 expected ascii-8bit, , don't know hot use it, or see in browser.

any help?

it's base64, revealed msg.body.encoding # return "base64". i'm no email format expert, i'd guess base64 nature of body revealed in header didn't include in paste. (after msg.body.encoding must getting somewhere).

base64 isn't character encoding utf-8. it's instead conversion of binary data ascii.

i think it's unfortunate email gem doesn't take care of you.

but if have base64, can decode using stdlib base64 class.

 data = base64.decode(msg.body) 

however, if it's base64-encoded in first place, comes out other side might not plain text, kind of binary file format (an ms word document? dunno), might still not make sense read directly once decoded


Comments

Popular posts from this blog

javascript - Karma not able to start PhantomJS on Windows - Error: spawn UNKNOWN -

c# - Display ASPX Popup control in RowDeleteing Event (ASPX Gridview) -

Nuget pack csproj using nuspec -