POP3 клиент quoted-printable декодирование - C#
Формулировка задачи:
Никто не знает? Ну ладно. А как перекодировать из Quoted Printable в нормальный вид?
Я использовал следующую конструкцию:
Вызывал и записывал в файл так:
А в файле с вложением отобразилось вот так:
Почему не декодировалось? Облазил все, что можно((( Подскажите, что делать - сроки поджимают.
public static string GetDecodeString(string mimeString) { var regex = new Regex(@"=\?(?<charset>.*?)\?(?<encoding>[qQbB])\?(?<value>.*?)\?="); var encodedString = mimeString; var decodedString = string.Empty; while (encodedString.Length > 0) { var match = regex.Match(encodedString); if (match.Success) { // If the match isn't at the start of the string, copy the initial few chars to the output decodedString += encodedString.Substring(0, match.Index); var charset = match.Groups["charset"].Value; var encoding = match.Groups["encoding"].Value.ToUpper(); var value = match.Groups["value"].Value; if (encoding.Equals("B")) { // Encoded value is Base-64 var bytes = Convert.FromBase64String(value); decodedString += Encoding.GetEncoding(charset).GetString(bytes); } else if (encoding.Equals("Q")) { // Encoded value is Quoted-Printable // Parse looking for =XX where XX is hexadecimal var regx = new Regex("(\\=([0-9A-F][0-9A-F]))", RegexOptions.IgnoreCase); decodedString += regx.Replace(value, new MatchEvaluator(delegate(Match m) { byte[] bytes = new byte[m.Value.Length / 3]; for (int i = 0; i < bytes.Length; i++) { string hex = m.Value.Substring(i * 3 + 1, 2); int iHex = Convert.ToInt32(hex, 16); bytes[i] = Convert.ToByte(iHex); } return Encoding.GetEncoding(charset).GetString(bytes); })); decodedString = decodedString.Replace('_', ' '); } else { // Encoded value not known, return original string // (Match should not be successful in this case, so this code may never get hit) decodedString += encodedString; break; } // Trim off up to and including the match, then we'll loop and try matching again. encodedString = encodedString.Substring(match.Index + match.Length + 1); } else { // No match, not encoded, return original string decodedString += encodedString; break; } } return decodedString; }
using (StreamReader reader = new StreamReader(@"C:\" + filename+".txt")) { string str = RegexDecode.DecodeEncodedWordValue(reader.ReadToEnd()); string filenameDecode = @"TempMessageFileDecode" + i.ToString(); pop3.SaveToFile(str, @"C:\", filenameDecode); }
Return-Path: <test@domain.local> Received: from st41nb ([192.168.191.248]) by [192.168.191.248] (Courier Mail Server 2.10) with ESMTP id 00500001 for <csti@domain.local>; Mon, 15 Aug 2011 13:10:47 +0400 From: "Ilyasov" <test@domain.local> To: <csti@domain.local> Subject: FW: Калуга_газ_без расхода Date: Mon, 15 Aug 2011 13:10:47 +0400 Message-ID: <000001cc5b2b$3867a660$a936f320$@local> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_0001_01CC5B4C.BF794660" X-Mailer: Microsoft Office Outlook 12.0 Thread-Index: AcxbEHnrAGcNB+GZTWKq+UW7nFwCZAAGreLw Content-Language: ru This is a multi-part message in MIME format. ------=_NextPart_000_0001_01CC5B4C.BF794660 Content-Type: multipart/alternative; boundary="----=_NextPart_001_0002_01CC5B4C.BF794660" ------=_NextPart_001_0002_01CC5B4C.BF794660 Content-Type: text/plain; charset="koi8-r" Content-Transfer-Encoding: quoted-printable =20 =20 From: removed@mail.ru [mailto:removed@mail.ru]=20 Sent: Monday, August 15, 2011 9:59 AM To: removed@mail.ru Subject: =EB=C1=CC=D5=C7=C1_=C7=C1=DA_=C2=C5=DA =D2=C1=D3=C8=CF=C4=C1 =20 =20 ------=_NextPart_001_0002_01CC5B4C.BF794660 Content-Type: text/html; charset="koi8-r" Content-Transfer-Encoding: quoted-printable <META HTTP-EQUIV=3D"Content-Type" CONTENT=3D"text/html; = charset=3Dkoi8-r"> <html xmlns:v=3D"urn:schemas-microsoft-com:vml" = xmlns:o=3D"urn:schemas-microsoft-com:office:office" = xmlns:w=3D"urn:schemas-microsoft-com:office:word" = xmlns:m=3D"http://schemas.microsoft.com/office/2004/12/omml" = xmlns=3D"http://www.w3.org/TR/REC-html40"><head><meta name=3DGenerator = content=3D"Microsoft Word 12 (filtered medium)"><style><!-- /* Font Definitions */ @font-face {font-family:Calibri; panose-1:2 15 5 2 2 2 4 3 2 4;} @font-face {font-family:Tahoma; panose-1:2 11 6 4 3 5 4 4 2 4;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal {margin:0cm; margin-bottom:.0001pt; font-size:11.0pt; font-family:"Calibri","sans-serif";} a:link, span.MsoHyperlink {mso-style-priority:99; color:blue; text-decoration:underline;} a:visited, span.MsoHyperlinkFollowed {mso-style-priority:99; color:purple; text-decoration:underline;} span.EmailStyle17 {mso-style-type:personal-reply; font-family:"Calibri","sans-serif"; color:#1F497D;} ..MsoChpDefault {mso-style-type:export-only;} @page WordSection1 {size:612.0pt 792.0pt; margin:2.0cm 42.5pt 2.0cm 3.0cm;} div.WordSection1 {page:WordSection1;} --></style><!--[if gte mso 9]><xml> <o:shapedefaults v:ext=3D"edit" spidmax=3D"1026" /> </xml><![endif]--><!--[if gte mso 9]><xml> <o:shapelayout v:ext=3D"edit"> <o:idmap v:ext=3D"edit" data=3D"1" /> </o:shapelayout></xml><![endif]--></head><body lang=3DRU link=3Dblue = vlink=3Dpurple><div class=3DWordSection1><p class=3DMsoNormal><span = style=3D'color:#1F497D'><o:p> </o:p></span></p><p = class=3DMsoNormal><span = style=3D'color:#1F497D'><o:p> </o:p></span></p><div = style=3D'border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0cm = 0cm 0cm'><p class=3DMsoNormal><b><span = style=3D'font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span>= </b><span style=3D'font-size:10.0pt;font-family:"Tahoma","sans-serif"'> = removed@mail.ru [mailto:removed@mail.ru] = <br><b>Sent:</b> Monday, August 15, 2011 9:59 AM<br><b>To:</b> = removed@mail.ru<br><b>Subject:</b> = =EB=C1=CC=D5=C7=C1_=C7=C1=DA_=C2=C5=DA = =D2=C1=D3=C8=CF=C4=C1<o:p></o:p></span></p></div><p = class=3DMsoNormal><o:p> </o:p></p><p = class=3DMsoNormal><o:p> </o:p></p></div></body></html> ------=_NextPart_001_0002_01CC5B4C.BF794660-- ------=_NextPart_000_0001_01CC5B4C.BF794660 Content-Type: application/octet-stream; name="310244_51401.110815" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="310244_51401.110815" CP866_404 //51401:1108:310244:15:4::++ (20):::::::2479::::2479:: (2000003)::02 5211:706:20:::2479::::2479:: =3D=3D ##15.08.2011 ## ##=C2=E5=F0=F1=E8=FF ARM_Maker - 4.4.8 ## ## ## ------=_NextPart_000_0001_01CC5B4C.BF794660 Content-Type: application/octet-stream; name="310244_51401.110811" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="310244_51401.110811" CP866_404 //51401:1108:310244:11:4::++ (20):::::::2479::::2479:: (2000003)::02 5211:706:20:::2479::::2479:: =3D=3D ##15.08.2011 ## ##=C2=E5=F0=F1=E8=FF ARM_Maker - 4.4.8 ## ## ## ------=_NextPart_000_0001_01CC5B4C.BF794660 Content-Type: application/octet-stream; name="310244_51401.110812" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="310244_51401.110812" CP866_404 //51401:1108:310244:12:4::++ (20):::::::2479::::2479:: (2000003)::02 5211:706:20:::2479::::2479:: =3D=3D ##15.08.2011 ## ##=C2=E5=F0=F1=E8=FF ARM_Maker - 4.4.8 ## ## ## ------=_NextPart_000_0001_01CC5B4C.BF794660 Content-Type: application/octet-stream; name="310244_51401.110813" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="310244_51401.110813" CP866_404 //51401:1108:310244:13:4::++ (20):::::::2479::::2479:: (2000003)::02 5211:706:20:::2479::::2479:: =3D=3D ##15.08.2011 ## ##=C2=E5=F0=F1=E8=FF ARM_Maker - 4.4.8 ## ## ## ------=_NextPart_000_0001_01CC5B4C.BF794660 Content-Type: application/octet-stream; name="310244_51401.110814" Content-Transfer-Encoding: quoted-printable Content-Disposition: attachment; filename="310244_51401.110814" CP866_404 //51401:1108:310244:14:4::++ (20):::::::2479::::2479:: (2000003)::02 5211:706:20:::2479::::2479:: =3D=3D ##15.08.2011 ## ##=C2=E5=F0=F1=E8=FF ARM_Maker - 4.4.8 ## ## ## ------=_NextPart_000_0001_01CC5B4C.BF794660--
Решение задачи: «POP3 клиент quoted-printable декодирование»
textual
Листинг программы
Attachment attachment = Attachment.CreateAttachmentFromString("", "=?utf-8?Q?=D0=9F=D0=B0=D0=BA=D0=B5=D1=82=5F=D0=BE=D1=82=D1=87=D0=B5=D1=82=D0=BD=D0=BE=D1=81=D1=82?="); Console.WriteLine(attachment.Name);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д