본문 바로가기

Develop

내 마크다운 노트를 킨들(Kindle)에 한 방에 쏘는 법 (feat. Python)

안녕하세요! 평소에 공부한 내용이나 생각들을 마크다운(.md)으로 기록하시는 분들 많으시죠?

작성한 내용을 침대나 지하철에서 킨들로 편하게 읽고 싶다는 생각을 해보신 적 없나요?

오늘은 파이썬(Python)을 이용해 클릭 한 번으로 내 마크다운 파일을 킨들로 자동 전송하는 '마법의 스크립트'를 만들어 보겠습니다.

🧐 왜 이 기능이 필요한가요?

  • 눈의 피로 감소: 모니터 대신 전자잉크(E-Ink)로 내가 정리한 노트를 읽을 수 있습니다.
  • 집중력 향상: 인터넷이 안 되는 킨들 환경에서 내가 쓴 글에만 집중할 수 있습니다.
  • 자동화의 희열: 귀찮게 이메일을 열고 파일 첨부할 필요 없이, 터미널 명령 한 줄이면 끝납니다.

🛠️ 준비물

시작하기 전에 딱 세 가지만 체크하세요!

  1. 내 킨들 이메일 확인: 아마존 설정에서 @kindle.com 주소를 확인하세요.
  2. 발신 메일 승인: 아마존의 'Approved Personal Document E-mail List'에 내 지메일(Gmail) 주소를 추가하세요.
  3. 앱 비밀번호 발급: 보안을 위해 지메일 설정에서 '앱 비밀번호'를 꼭 받아두세요.

💻 파이썬 마법 스크립트

자, 이제 핵심 코드를 보겠습니다. 이 코드는 마크다운 파일을 읽어서 아마존 서버로 전송합니다. 이때 제목을 "Convert"라고 붙이는 게 핵심입니다. 그래야 킨들이 예쁘게 변환해 주거든요!

import smtplib
import os
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders

def send_md_to_kindle(file_path):
    # --- 설정 영역 ---
    KINDLE_EMAIL = "your_name@kindle.com"    # 킨들 주소
    SENDER_EMAIL = "your_email@gmail.com"   # 내 지메일
    APP_PASSWORD = "xxxx xxxx xxxx xxxx"    # 구글 앱 비밀번호
    # ----------------

    if not os.path.exists(file_path):
        print(f"❌ 파일을 찾을 수 없습니다: {file_path}")
        return

    # 1. 메일 메시지 구성
    msg = MIMEMultipart()
    msg['From'] = SENDER_EMAIL
    msg['To'] = KINDLE_EMAIL
    msg['Subject'] = "Convert"  # ⭐ 중요: 이 단어가 있어야 킨들 포맷으로 변환됨

    # 2. 마크다운 파일 첨부
    filename = os.path.basename(file_path)
    with open(file_path, 'rb') as attachment:
        part = MIMEBase('application', 'octet-stream')
        part.set_payload(attachment.read())
        encoders.encode_base64(part)
        part.add_header('Content-Disposition', f'attachment; filename={filename}')
        msg.attach(part)

    # 3. SMTP 서버를 통한 발송 (Gmail 기준)
    try:
        print(f"🚀 {filename} 전송 중...")
        server = smtplib.SMTP('smtp.gmail.com', 587)
        server.starttls()
        server.login(SENDER_EMAIL, APP_PASSWORD)
        server.send_message(msg)
        server.quit()
        print("✅ 전송 완료! 잠시 후 킨들에서 확인하세요.")
    except Exception as e:
        print(f"❌ 오류 발생: {e}")

# 실행 예시
if __name__ == "__main__":
    send_md_to_kindle("오늘의_공부내용.md")

💡 꿀팁: 더 완벽하게 읽고 싶다면?

단순히 .md 파일을 보내면 텍스트 파일처럼 보일 때가 있습니다. 만약 표(Table)나 복잡한 서식이 들어간다면?

  1. Pandoc 활용: pypandoc 라이브러리를 사용해 .md를 먼저 .epub으로 변환한 뒤 보내보세요. 킨들이 가장 좋아하는 포맷입니다.
  2. UTF-8 인코딩: 한글이 깨진다면 파일 저장 시 반드시 인코딩을 UTF-8로 설정했는지 확인하세요.
  3. 이미지 주의: 마크다운 안의 이미지는 로컬 경로일 경우 전송되지 않습니다. 이미지가 중요하다면 PDF로 변환해서 보내는 것이 낫습니다.

🚀 마치며

이제 여러분의 킨들은 단순한 소설책 리더기가 아니라, 여러분의 지식 창고가 되었습니다. 파이썬 스크립트 하나로 지식 습득의 경로를 더 스마트하게 바꿔보세요!

궁금한 점이 있다면 댓글로 남겨주세요! 😉