이메일 Base64 디코딩에서...

익명 사용자의 이미지

안녕하세요

간단한 SMTP 를 만들었습니다.
메일을 base64 를 이용해서 디코딩하게 되있는데 ( 사실은 제가
만든것이 아니라서 잘 모름니다. ^^; )

몇가지 질문이 있습니다

1. base64 로 모든 인코딩된 메일을 디코딩 가능합니까?

2. 간혹가다가 제목을 디코딩 못하고 아웃룩에서 속성으로 보면
제목 부분이 아래와 같고..

Subject =?ks_c_5601-1987?q?[=B1=A4=B0=ED]
40=B8=B8_=B5=B9=C6=C4=B1=E2=B3=E4_=B0=A8=BB=E7=C0=CC=BA=A5=C6=AE
(=C0=CE=C2=AF)?=

제꺼 Base64 디코딩 했을때는

P8A?|픶克

익명 사용자의 이미지

base64는 메일을 보내기 위한 디코딩 방법 중에 하나입니다. 즉,

base64로 인코딩 된것만 base64로 디코딩할 수 있습니다. 물론, 이것은

MIME 헤더에 어떤 형식으로 인코딩 되었다는 것이 나옵니다. 일반적으로

는 base64를 많이 쓰지만, 가끔씩 quota-print 등으로 인코딩된 것들도

있습니다. 예로드신 제목의 경우 quota-print 로 인코딩이 되어있군요

Subject =?ks_c_5601-1987?q?[=B1=A4=B0=ED]
40=B8=B8_=B5=B9=C6=C4=B1=E2=B3=E4_=B0=A8=BB=E7=C0=CC=BA=A5=C6=AE
(=C0=CE=C2=AF)?=

먼저 제목을 인코딩하는 것은 앞의 =? 와 뒤의 ?= 를 떼어냅니다. 그리고

문자 코드 ks_c_5601-1987 가 있고 ?q? 라는 부분이 있습니다. 여기가

q 면 quota-print 라는 뜻이고 b 면 base64라는 뜻입니다. 즉

quota-print 로 디코딩 하시면 잘 나옵니다. ^^

이제 나머지 부분은 위의 형식에 따라서 다시 인코딩해주면 됩니다.

본문의 인코딩은 본문전의 MIME 헤더에서 발견할 수 있습니다.

quota-print 나 base64는 어려운 인코딩 방법이 아니므로 금방

구현하실 수 있을것입니다. 그것보다는 MIME 파싱에 더 신경을

쓰시길... 그럼 고운 하루...

리눅스 wrote..
안녕하세요

간단한 SMTP 를 만들었습니다.
메일을 base64 를 이용해서 디코딩하게 되있는데 ( 사실은 제가
만든것이 아니라서 잘 모름니다. ^^; )

몇가지 질문이 있습니다

1. base64 로 모든 인코딩된 메일을 디코딩 가능합니까?

2. 간혹가다가 제목을 디코딩 못하고 아웃룩에서 속성으로 보면
제목 부분이 아래와 같고..

Subject =?ks_c_5601-1987?q?[=B1=A4=B0=ED]
40=B8=B8_=B5=B9=C6=C4=B1=E2=B3=E4_=B0=A8=BB=E7=C0=CC=BA=A5=C6=AE
(=C0=CE=C2=AF)?=

제꺼 Base64 디코딩 했을때는

P8A?|픶克

익명 사용자의 이미지

감사합니다.

그런데 quoted-print 디코딩 하는 함수 소스를 찾으려고 했는데
찾질 못하겠습니다.

고글도 찾아 봣는데 펄은 많이 있더라구요

# perl -e 'use MIMEQuotedPrint; print decode_qp("haha")';

C 로 된 소스를 가지고 있거나 링크가 있으면 가르쳐 주시기 바랍니다.

익명 사용자의 이미지

미력 하지나마 몇자 꺼적여 봅니다..

혹시 도움이 된다면 기뻐~~~ 할꼬야. ~~

#include
int main (int argc, char *argv []) {
Quoted_parse (argv [1], argv [2]);
exit (0);
}
int Quoted_to_string (char *obuf, char *ibuf) {
while (*ibuf) {
if (*(ibuf) == '=' && *(ibuf + 1) == 0x20 && *(ibuf
+ 2) == 0x0a) {
ibuf+=3;
continue;
}
if (*ibuf == '=') {
*obuf = (*(ibuf + 1) - (*(ibuf + 1)
> '9' ? 'A'-'9' - 1 0) - '0') * 16;
*obuf += *(ibuf + 2) - (*(ibuf + 2)
> '9' ? 'A'-'9' - 1 0) - '0';
ibuf += 2;
obuf++;
}
else *obuf++ = *ibuf;
ibuf++;
}
*obuf = '\0';
return 0;
}
int Quoted_parse (char *in, char *out) {
FILE *rp;
FILE *wp;
char src [256 + 1];
char des [256 + 1];
if ((rp = fopen (in, "r")) != NULL) {
wp = fopen (out, "w");
memset(des, 0, sizeof (des));
memset(src, 0, sizeof (src));
while (fgets (src, 256, rp) != NULL) {
Quoted_to_string (des, src);
fprintf (wp, "%s", des);
}
fclose (rp);
fclose (wp);
}
return (0);
}

이상 입니다. ~~~

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.