HTML 이메일 본문을 브라우저 안에서 마크다운으로 변환하는 FormatArc 한국어 화면HTML 이메일 본문을 브라우저 안에서 마크다운으로 변환하는 FormatArc 한국어 화면
저자: FormatArc 편집부게시일: 2026-07-17갱신일: 2026-08-22

HTML 이메일 마크다운 변환 - Gmail·Outlook·서버 업로드 없음

뉴스레터 내용을 개인 노트나 옵시디언(Obsidian)·노션(Notion)에 정리하고 싶거나, 고객사나 서비스의 공지 메일을 기술 문서로 옮겨 적고 싶거나, 주고받은 이메일 스레드를 LLM(대규모 언어 모델)에 프롬프트 컨텍스트로 전달하고 싶을 때가 있습니다. 하지만 HTML 이메일의 소스를 열어보면 일반 웹 페이지와는 비교가 되지 않을 정도로 복잡하고 지저분한 HTML을 마주하게 됩니다. 몇 겹씩 중첩된 레이아웃 테이블(<table>), 모든 태그에 덕지덕지 붙은 인라인 style 속성, 눈에 보이지 않는 1x1 트래킹 픽셀 이미지까지 섞여 있기 때문입니다. 이 글에서는 같은 이메일이라도 "어디서부터 복사하느냐"에 따라 변환 결과가 완전히 달라진다는 점을 실측 데이터로 보여드리고, Gmail, Outlook, .eml 파일에서 본문 HTML을 깔끔하게 추출하는 방법과 변환 후 마무리 정리까지 자세히 안내합니다.

결론부터 — 무엇을 남길지에 따라 경로가 달라집니다

도구를 고르기 전에 먼저 결정해야 할 것은 최종 결과물에 무엇을 남길 것인가입니다. 이메일에서 마크다운으로 보존하려는 정보의 범위에 따라 최적의 경로가 달라집니다.

  • 열려 있는 이메일 몇 통의 본문 텍스트만 남기고 싶은 경우: 브라우저 내부 변환이 가장 빠릅니다. 본문 블록의 HTML을 복사해 HTML to Markdown 변환기에 붙여넣습니다. 로그인이나 설치 없이 무료로 쓸 수 있으며, 붙여넣은 내용은 외부 서버로 전송되지 않습니다.
  • 발신자(From), 제목(Subject), 날짜, 인용 답장 스레드, 첨부파일 목록까지 남겨야 하거나 수십 통의 .eml 파일이 있는 경우: .eml을 직접 파싱할 수 있는 CLI 도구(후술하는 eml2md 계열)가 적합합니다.
  • 이메일을 정기적으로 가져와 가공하는 자동화 파이프라인을 구축하려는 경우: Python의 email 모듈과 markdownify 라이브러리로 원하는 MIME 파트를 추출해 변환합니다.

두 가지 중요한 전제가 있습니다. 첫째, 브라우저 기반 변환 도구가 다루는 대상은 "추출된 HTML 텍스트"이지 .eml 파일 자체가 아닙니다. .eml은 단순한 HTML 문서가 아니라 헤더와 본문이 묶인 MIME 멀티파트 컨테이너이므로 파일 자체를 붙여넣어서는 변환할 수 없습니다. 둘째, 대다수의 이메일은 multipart/alternative 형식으로 작성되어 HTML 버전과 순수 텍스트(text/plain) 버전을 함께 담고 있습니다. 서식 없는 텍스트만으로 충분하다면 별도의 HTML 변환 과정 없이 일반 텍스트 버전을 그대로 활용하는 것으로 충분할 수도 있습니다. LLM 프롬프트 전달을 위한 형식 선택 기준은 LLM을 위한 Markdown vs HTML 비교에서 자세히 다루고 있습니다.

실측 — 복사하는 범위에 따라 결과가 완전히 달라집니다

대표적인 뉴스레터 구조를 재현한 샘플 이메일 1통(실제 발송 메일의 통계가 아닌 재현용 픽스처입니다)을 FormatArc 변환 도구와 동일한 설정의 Turndown 7.2.4에 통과시켜 비교 측정했습니다. 측정일은 2026-07-17이며, 재현 스크립트와 샘플, 측정 원본 데이터는 리포지토리 내 scripts/benchmarks/html-email-to-markdown/에 있습니다. 아래 수치는 모두 이 실측에 근거합니다.

전체 소스를 붙여넣으면 12열짜리 표로 뭉개집니다

샘플 이메일의 전체 소스 크기는 6,491바이트입니다. 이 안에는 레이아웃 배치를 위한 중첩 <table> 태그 8개, style 인라인 속성 33개, MSO 조건부 주석 3개, 1x1 크기의 트래킹 픽셀 이미지 1개, 클릭 수 측정을 위한 리디렉션 링크 4개가 포함되어 있습니다.

이 소스를 그대로 마크다운으로 변환하면 출력 결과는 12개 열(구분선 행 포함 10행)을 가진 납작한 파이프 표로 찌그러집니다. 여러 겹으로 중첩되어 있던 레이아웃 테이블의 행들이 모두 하나의 거대한 표로 병합되면서, 본문의 동일한 문장이 여러 셀에 걸쳐 중복되어 나타납니다. 표로서도, 읽기 위한 글로서도 쓸 수 없는 상태가 됩니다. 게다가 <head> 안에 있던 <title> 텍스트와 <style> 블록의 CSS 코드 380바이트가 본문 텍스트의 맨 앞에 그대로 노출됩니다.

이러한 표 깨짐 현상은 테이블의 모든 행을 모아 하나의 파이프 표로 변환하는 일반적인 변환 규칙 때문에 일어납니다. 데이터가 정리된 일반 표에서는 정상 작동하지만, 화면 배치를 위해 마크업된 중첩 테이블과는 상성이 맞지 않습니다. 어떤 도구를 쓰더라도 레이아웃 테이블이 포함된 이메일 전체 소스를 그대로 변환해서는 깨끗한 결과를 얻을 수 없습니다.

본문 블록만 붙여넣으면 477자의 깔끔한 마크다운이 됩니다

동일한 이메일에서 본문 영역을 감싸고 있는 요소(본문 블록의 HTML, 1,086바이트)만 따로 추출해 변환하면 결과가 완전히 달라집니다. 출력은 477자의 정돈된 마크다운으로 생성되며, 제목 태그는 #, 문단은 문단, 링크는 링크 문법으로 유지됩니다. 8개의 인라인 style 속성도 깨끗하게 제거됩니다.

다만 마케팅 클릭 측정용 리디렉션 URL은 링크 주소로 그대로 남게 되는데, 이는 변환 후처리 단계에서 손쉽게 정리할 수 있습니다. 핵심 결론은 간단합니다. 전체 소스를 붙여넣지 말고, 본문 블록만 복사해서 붙여넣어야 합니다.

이메일 HTML이 유독 지저분한 이유

이메일의 HTML이 일반 웹 페이지와 구조적으로 다른 데에는 기술적인 이유가 있습니다.

  • 테이블 위주의 레이아웃: 이메일 클라이언트의 모던 CSS 지원 범위가 매우 제한적이기 때문입니다. 예를 들어 Windows용 클래식 Outlook은 Microsoft 공식 문서에서 Word의 HTML 렌더링 엔진을 사용해 이메일을 표시한다고 설명새 탭에서 열립니다하고 있으며, 해당 문서의 미지원 목록에는 float, position, max-width 등이 명시되어 있습니다. 따라서 테이블 이외에는 레이아웃을 잡을 수단이 없습니다.
  • MSO 조건부 주석: <!--[if mso]>로 시작하는 조건부 주석은 Outlook 전용 스타일과 마크업을 별도로 분기하기 위한 장치입니다. 마크다운 변환 시에는 HTML 주석으로 처리되어 출력에서 자동 제거됩니다.
  • 인라인 style 속성: 외부 스타일시트나 <style> 태그를 무시하는 메일 클라이언트가 많아 모든 디자인 서식이 개별 요소의 style 속성에 직접 인라인으로 삽입됩니다.
  • 트래킹 요소: 수신 확인용 1x1 투명 이미지와 클릭 추적용 리디렉션 링크(https://click.example.com/track?dest=... 형태)가 본문 마크업에 결합되어 있습니다.

이메일 클라이언트에서 HTML 본문 추출하기

변환의 품질은 본문 HTML을 어떻게 추출하느냐에 달려 있습니다. 클라이언트별 구체적인 방법을 살펴봅니다.

가장 확실한 방법: 개발자 도구(F12)로 본문 블록 복사

Gmail을 비롯해 네이버 메일, 다음 메일, 웹용 Outlook 등 모든 웹메일에서 사용할 수 있으며, 실측에서 확인한 "본문 블록만 변환"에 해당하는 가장 확실한 방법입니다.

  1. 브라우저에서 이메일을 열고, 본문 텍스트 위에서 마우스 오른쪽 버튼을 클릭한 뒤 검사(Inspect)를 선택합니다.
  2. 개발자 도구(Elements 탭)에서 본문 전체(제목과 문단, 이미지 등을 모두 포함하는 부모 요소)를 감싸는 컨테이너 태그까지 선택 영역을 한두 단계 위로 올립니다.
  3. 해당 태그 위에서 마우스 오른쪽 버튼을 누르고 Copy > Copy outerHTML을 선택합니다.

이렇게 하면 메일함 UI나 헤더 영역을 제외한, 디코딩이 완료된 순수 본문 HTML만 클립보드에 깔끔하게 복사됩니다.

"원본 보기"의 함정 — quoted-printable 인코딩

Gmail의 "원본 보기"나 썬더버드(Thunderbird)의 소스 보기에서 보이는 내용은 MIME 메시지 전체입니다. 이 소스 내의 HTML 파트는 대부분 Content-Transfer-Encoding: quoted-printable로 인코딩되어 있어, 이를 그대로 복사하면 깨진 HTML 코드를 얻게 됩니다.

Content-Type: text/html; charset="utf-8"
Content-Transfer-Encoding: quoted-printable

<td style=3D"padding:24px 32px 12px 32px; font-family:Arial, Helvetica, san=
s-serif;">

여기서 =3D= 기호의 인코딩 표현이며, 줄 끝의 단독 =는 소프트 줄바꿈(디코딩 시 다음 줄과 연결되는 표시)을 의미합니다. RFC 2045 Section 6.7새 탭에서 열립니다에 정의된 quoted-printable 규칙은 다양하기 때문에, 텍스트 에디터에서 단순히 =3D만 일괄 치환한다고 해서 원래 HTML로 온전히 복원되지 않습니다. quoted-printable 디코딩은 MIME 파트 단위로 처리해야 하므로 원본 소스에서 복사하기보다는 개발자 도구를 쓰거나 아래의 CLI·Python 방식을 사용하는 것이 안전합니다.

Outlook·Apple Mail·Thunderbird에서의 추출

  • Windows용 클래식 Outlook: 메시지 본문에서 마우스 오른쪽 메뉴 등을 통해 소스 보기를 실행하면 디코딩된 HTML이 에디터로 열립니다. 여기서 본문 HTML을 복사하면 quoted-printable 문제 없이 활용할 수 있습니다.
  • Apple Mail 및 Thunderbird: 메시지를 드래그하거나 "별도 저장" 메뉴를 통해 .eml 파일로 내보낼 수 있습니다. .eml 파일은 텍스트 에디터로 열어 복사하기보다 다음에 설명할 CLI 도구에 전달하는 편이 훨씬 빠르고 정확합니다.

FormatArc로 변환하기 — 서버 업로드 없는 브라우저 내부 처리

본문 블록의 HTML을 복사했다면 변환 과정은 3단계로 간단합니다.

  1. HTML to Markdown 변환기를 엽니다.
  2. 왼쪽 입력창에 복사한 HTML을 붙여넣습니다.
  3. 변환 버튼을 누르면 오른쪽 창에 마크다운 결과가 즉시 출력됩니다.

HTML 이메일 본문을 브라우저 안에서 마크다운으로 변환하는 FormatArc 한국어 화면HTML 이메일 본문을 브라우저 안에서 마크다운으로 변환하는 FormatArc 한국어 화면

모든 변환 작업은 브라우저 내부의 JavaScript 엔진 안에서만 실행되며, 붙여넣은 텍스트나 이메일 데이터는 외부 서버로 일절 전송되지 않습니다. 기밀 유지 협약이 걸린 비즈니스 메일이나 사내 공지, 개인정보가 포함된 이메일을 다룰 때 서버 업로드형 온라인 변환 사이트와 차별화되는 가장 큰 안전상의 이점입니다. 보안 검증 기준은 온라인 변환 사이트 보안 검증에 정리되어 있습니다. 변환의 기본 사용법과 HTML 태그 대응표는 HTML 마크다운 변환 가이드를, Word나 웹 페이지에서 복사한 HTML 정리 방법은 HTML 붙여넣기 마크다운 변환을 참고하세요.

변환 후 확인해야 할 체크리스트

본문 블록만 깔끔하게 변환하더라도 이메일 고유의 부가 요소들이 마크다운에 일부 남을 수 있습니다. 문서를 저장하거나 공유하기 전에 다음 5가지를 확인하세요.

  • 트래킹 링크 원본 복원: https://click.example.com/track?dest=https%3A%2F%2F...와 같은 클릭 추적용 리디렉션 URL은 dest= 파라미터 등을 URL 디코딩하여 실제 대상 링크로 수정하거나 불필요한 경우 링크를 제거합니다. 이때 링크 유효성을 확인하겠다고 브라우저로 여러 URL을 일괄 접속하는 행위는 클릭 추적 카운트를 발생시키므로 피하는 것이 좋습니다.
  • 트래킹 픽셀 제거: ![](https://.../open/...)처럼 alt 텍스트가 비어 있는 1x1 크기의 추적용 이미지 태그가 남아 있다면 삭제합니다.
  • cid: 인라인 이미지 처리: 본문에 ![](cid:image001)과 같은 참조가 남아 있을 수 있습니다. 이는 이메일 MIME 파트(multipart/related)에 첨부된 내부 이미지를 뜻하며, 이메일 클라이언트 외부에서는 이미지가 표시되지 않습니다. 이미지가 필요하다면 메일이나 .eml에서 이미지를 별도로 추출하여 교체해야 합니다.
  • &nbsp; 공백 및 빈 줄 정리: HTML 이메일의 간격 조절용 &nbsp;로 인해 발생한 불필요한 연속 공백이나 빈 줄을 정리합니다.
  • 서명 및 수신거부 푸터 정리: 하단의 발신자 서명, 법적 고지문, 뉴스레터 수신거부 링크, 이전 답장 인용문 등을 보존할지 삭제할지 결정합니다.

.eml 파일을 대량으로 변환하기 — CLI와 Python

여러 개의 .eml 파일을 한꺼번에 변환해야 하거나 발신자, 수신자, 날짜 등 헤더 메타데이터까지 함께 마크다운으로 보존해야 한다면 MIME 구조를 파싱할 수 있는 전용 도구를 사용합니다.

CLI 도구로는 Python pip로 설치할 수 있는 eml-to-md새 탭에서 열립니다가 이메일 헤더 정보를 포함한 마크다운을 생성해 주며, AI 에이전트에 전체 메일함 접근 권한을 주지 않고 필요한 메일 컨텍스트만 전달하는 용도로 유용합니다. Rust로 개발된 eml2md새 탭에서 열립니다 도구도 있습니다.

pip install eml-to-md
eml2md message.eml            # 단일 파일 변환
eml2md *.eml -o converted/    # 폴더 내 모든 파일 일괄 변환

Python으로 자동화 파이프라인을 구축한다면 표준 라이브러리인 email 모듈새 탭에서 열립니다markdownify새 탭에서 열립니다 패키지를 조합하는 것이 좋습니다. 바이너리 모드(rb)로 파일을 열고, policy.default를 전달한 뒤, get_body()로 원하는 파트를 가져옵니다. get_content() 메서드가 quoted-printable 및 Base64 디코딩을 자동으로 처리합니다.

import email
from email import policy
from markdownify import markdownify

with open("message.eml", "rb") as f:
    msg = email.message_from_binary_file(f, policy=policy.default)

body = msg.get_body(preferencelist=("html", "plain"))
print(markdownify(body.get_content()))

이 밖에도 추출한 HTML을 pandoc새 탭에서 열립니다에 전달하거나, 터미널 환경에서 파이프라인으로 연결하여 처리(cat body.html | formatarc html-to-markdown)할 수도 있습니다. FormatArc의 CLI 도구 활용법은 formatarc npm 패키지 안내에서 자세히 다루고 있습니다.

방법별 비교표

변환 방식적합한 상황필요 환경헤더·스레드 정보보안 및 데이터 처리
HTML to Markdown 변환기열려 있는 이메일 몇 통의 본문 변환웹 브라우저 (무료·무설치)본문 전용브라우저 내부 처리 (외부 전송 없음)
eml2md 계열 CLI수십 통의 .eml 파일 일괄 변환pip / cargo 환경헤더 포함 출력로컬 머신에서 처리
Python (email + markdownify)정기적인 자동화 파이프라인 구축Python 환경자유롭게 제어 가능로컬 머신에서 처리
서버 업로드형 온라인 변환기다른 도구를 전혀 쓸 수 없을 때웹 브라우저도구별 상이외부 서버로 전송됨 (용량 제한이나 유료화 존재)

자주 묻는 질문

Gmail에서 이메일 HTML 소스는 어디서 확인하나요?

이메일 오른쪽 상단의 점 세 개 메뉴에서 "원본 보기"를 선택하면 전체 MIME 메시지를 확인할 수 있습니다. 다만 여기에 포함된 HTML은 quoted-printable로 인코딩되어 있는 경우가 많아 그대로 복사하면 태그가 깨집니다. 본문 텍스트만 필요하다면 본문 위에서 마우스 우클릭 후 "검사"를 눌러 본문 컨테이너 태그의 outerHTML을 복사하는 것이 가장 안전합니다.

이메일 레이아웃이 마크다운 표로 그대로 변환되나요?

그대로 유지되지 않고 깨집니다. 이메일 레이아웃용으로 중첩된 <table> 태그는 1개의 거대한 표로 병합되면서 구조가 뭉개집니다(실측 결과 6,491바이트 소스가 12열짜리 표로 병합됨). 따라서 전체 소스 대신 본문 블록만 추출하여 변환해야 합니다. 반면 메일 본문에 포함된 실제 데이터 표(예: 요금 안내표, 주문 내역서)는 정상적인 마크다운 파이프 표로 올바르게 변환됩니다.

이메일 안의 이미지는 어떻게 변환되나요?

src 속성이 일반 웹 URL(https://...)을 가리키는 이미지는 ![대체텍스트](이미지URL) 형태의 마크다운 이미지 문법으로 정상 변환됩니다. 반면 cid:로 시작하는 이미지는 메일 파일 내부에 첨부된 리소스이므로 메일 클라이언트 외부에서는 표시되지 않습니다. 또한 1x1 크기의 트래킹 픽셀 이미지는 변환 후 직접 삭제해 주는 것이 좋습니다.

민감한 이메일 내용을 온라인 변환기에 붙여넣어도 안전한가요?

서버로 데이터를 전송하는 방식의 일반 온라인 변환기는 붙여넣는 순간 데이터가 외부 서버로 전달되어 저장될 위험이 있습니다. FormatArc의 변환기는 모든 처리가 사용자의 브라우저 내부 메모리에서만 이루어지며 네트워크를 통해 서버로 데이터를 전송하지 않으므로 사내 업무 메일이나 중요 문서도 안전하게 변환할 수 있습니다.

.eml 파일을 직접 붙여넣어 변환할 수 있나요?

직접 붙여넣을 수 없습니다. .eml 파일은 순수 HTML 파일이 아니라 헤더 정보와 인코딩된 멀티파트 데이터가 포함된 MIME 컨테이너 파일이기 때문입니다. 단일 메일이라면 브라우저에서 본문 블록을 복사해 변환하고, 여러 개의 .eml 파일이라면 eml2md 계열의 CLI 도구를 사용하는 것을 권장합니다.

정리

HTML 이메일을 마크다운으로 변환할 때 가장 중요한 것은 "어디에서부터 복사하느냐"입니다. 이메일 전체 소스를 그대로 붙여넣으면 중첩된 레이아웃 테이블이 12열짜리 표로 찌그러지고 상단 CSS 코드까지 섞여 나오지만, 본문 블록만 복사해 붙여넣으면 477자의 깔끔한 마크다운을 얻을 수 있습니다(실측 근거: scripts/benchmarks/html-email-to-markdown/).

  • 브라우저에 열려 있는 몇 통의 이메일 본문만 필요하다면 개발자 도구로 본문 블록을 복사해 HTML to Markdown 변환기를 활용하세요.
  • 여러 통의 .eml 파일이나 헤더가 포함된 변환이 필요하다면 eml2md 계열 CLI나 Python의 email 모듈을 활용하는 것이 효율적입니다.
  • 어떤 방식을 선택하든 변환 후 트래킹 링크와 불필요한 트래킹 픽셀을 정리하는 후처리 과정을 잊지 마세요.