Skip to content

Instantly share code, notes, and snippets.

@matthewhochler
Created April 14, 2016 18:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save matthewhochler/1ec6ad6492b880b886aaf5f8e74da808 to your computer and use it in GitHub Desktop.
Save matthewhochler/1ec6ad6492b880b886aaf5f8e74da808 to your computer and use it in GitHub Desktop.
#!/bin/bash
# Requires OS X with Homebrew
## Configuration ##
FROM_NAME=""
FROM_EMAIL=""
KINDLE_EMAIL=""
SMTP_HOST=""
SMTP_PORT="587"
SMTP_USER=""
SMTP_PASS=""
KINDLEGEN_PATH="$HOME/bin/kindlegen"
KINDLEGEN_URL="http://kindlegen.s3.amazonaws.com/KindleGen_Mac_i386_v2_9.zip"
WORK_PATH="/tmp/file2kindle"
## App ##
# Prepare environment
input=$1
file_path="$WORK_PATH"/$(basename "$input")
mkdir -p $(dirname "$KINDLEGEN_PATH")
mkdir -p "$WORK_PATH"
# Install KindleGen
if [ ! -f "$KINDLEGEN_PATH" ]; then
kindlegen_zip="$WORK_PATH"/kindlegen.zip
kindlegen_dir="$WORK_PATH"/kindlegen_zip
curl -o "$kindlegen_zip" "$KINDLEGEN_URL"
unzip -o "$kindlegen_zip" -d "$kindlegen_dir"
cp "$kindlegen_dir/kindlegen" "$KINDLEGEN_PATH"
chmod +x "$KINDLEGEN_PATH"
fi
# Convert file to MOBI
cp "$input" "$file_path"
if [[ $file_path == *.epub ]]; then
"$KINDLEGEN_PATH" "$file_path" -c2 -o "$(basename "$file_path").mobi"
file_path=$file_path.mobi
fi
# Install mutt
if ! hash mutt; then
brew install mutt
fi
# Email MOBI to Kindle
mutt_urlencode() {
old_lc_collate=$LC_COLLATE
LC_COLLATE=C
local length="${#1}"
for (( i = 0; i < length; i++ )); do
local c="${1:i:1}"
case $c in
[a-zA-Z0-9.~_-]) printf "$c" ;;
*) printf '%%%02X' "'$c" ;;
esac
done
LC_COLLATE=$old_lc_collate
}
smtp_user_urlsafe=$(mutt_urlencode $SMTP_USER)
smtp_pass_urlsafe=$(mutt_urlencode $SMTP_PASS)
cat > $HOME/.muttrc << EOL
set from = "$FROM_EMAIL"
set realname = "$FROM_NAME"
set smtp_url = "smtp://$smtp_user_urlsafe:$smtp_pass_urlsafe@$SMTP_HOST:$SMTP_PORT"
set record = ""
EOL
echo | mutt -s "New Kindle document" "$KINDLE_EMAIL" -a "$file_path"
echo > $HOME/.muttrc
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment