First commit
This commit is contained in:
commit
dc7bdafa4c
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
notes/
|
BIN
.readme.md.swp
Normal file
BIN
.readme.md.swp
Normal file
Binary file not shown.
81
notes.py
Executable file
81
notes.py
Executable file
@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env python
|
||||
# -*- coding: utf-8 -*-
|
||||
import email
|
||||
from email.header import decode_header
|
||||
import imaplib
|
||||
import html2text
|
||||
import sys
|
||||
import os
|
||||
import shutil
|
||||
import click
|
||||
|
||||
|
||||
@click.command()
|
||||
@click.option('--imap', help='Exampl Gmail: imap.gmail.com')
|
||||
@click.option('--user', help='Example: my@gmail.com')
|
||||
@click.option('--password', help='Example: 123456')
|
||||
def get_notes(imap, user, password):
|
||||
# Connect
|
||||
mail = imaplib.IMAP4_SSL(imap)
|
||||
mail.login(user, password)
|
||||
# Get data
|
||||
mail.list()
|
||||
mail.select("Notes")
|
||||
result, data = mail.search(None, "ALL")
|
||||
ids = data[0]
|
||||
# Ids is a space separated string
|
||||
folder = 'notes/'
|
||||
if os.path.exists(folder):
|
||||
shutil.rmtree(folder)
|
||||
os.makedirs(os.path.dirname(folder))
|
||||
# List of IDs
|
||||
id_list = ids.split()
|
||||
# List alls messages
|
||||
for key, item in enumerate(id_list):
|
||||
# Get message
|
||||
result, data = mail.fetch(item, "(RFC822)")
|
||||
raw_email = data[0][1]
|
||||
# Parse data
|
||||
msg = email.message_from_bytes(raw_email)
|
||||
# Get subject
|
||||
try:
|
||||
subject_html = decode_header(msg['Subject'])[0][0].decode('utf-8')
|
||||
except Exception:
|
||||
subject_html = decode_header(msg['Subject'])[0][0]
|
||||
# Get body
|
||||
try:
|
||||
body_html = msg.get_payload(decode=True).decode('utf-8')
|
||||
except Exception:
|
||||
body_html = msg.get_payload(decode=True)
|
||||
# Get markdown
|
||||
if body_html:
|
||||
# Get text
|
||||
subject_md = html2text.html2text(str(subject_html)).strip()
|
||||
body_md = html2text.html2text(str(body_html)).strip()
|
||||
# Save
|
||||
filename = folder + (subject_md.replace('/', '-')) + '.md'
|
||||
new_file = open(filename, 'a')
|
||||
new_file.write(body_md)
|
||||
new_file.close()
|
||||
# Progress
|
||||
progress(key, len(id_list), subject_md)
|
||||
# Print information
|
||||
print('\nFinish! 100%')
|
||||
|
||||
|
||||
def progress(count, total, status=''):
|
||||
'''
|
||||
Print progress bar
|
||||
'''
|
||||
bar_len = 60
|
||||
filled_len = int(round(bar_len * count / float(total)))
|
||||
|
||||
percents = round(100.0 * count / float(total), 1)
|
||||
bar = '=' * filled_len + '-' * (bar_len - filled_len)
|
||||
|
||||
sys.stdout.write('[%s] %s%s %s\r' % (bar, percents, '%', status))
|
||||
sys.stdout.flush()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
get_notes()
|
18
readme.md
Normal file
18
readme.md
Normal file
@ -0,0 +1,18 @@
|
||||
# Notes to MarkDown
|
||||
|
||||
Exports the notes of the application Notes for MacOS, Fastmail... in Markdown.
|
||||
|
||||
## Requeriments
|
||||
|
||||
You will need to have installed python3. Then you will have to install dependencies.
|
||||
|
||||
``` bash
|
||||
pip install -r requeriments.txt
|
||||
```
|
||||
## Use
|
||||
|
||||
Compatible with any account. You only need to know what the SMTP address of your email account. The following example would be using Gmail.
|
||||
|
||||
``` bash
|
||||
python3 notes.py --imap imap.gmail.com --user my@gmail.com --password 123456
|
||||
```
|
2
requeriments.txt
Normal file
2
requeriments.txt
Normal file
@ -0,0 +1,2 @@
|
||||
html2text
|
||||
click
|
Loading…
Reference in New Issue
Block a user