Calibre: ohne GUI E-Papers beziehen – Teil 2

Veröffentlicht am

Nachdem ich im vorigen Artikel Calibre: ohne GUI E-Papers beziehen – Teil 1 noch die Frage gestellt habe, wie man das Herunterladen und besonders das Versenden der E-Papers automatisieren könnte, habe ich nun eine Lösung für mich gefunden. Zumindest eine, die erst einmal funktioniert und benutzbar ist…

So sieht die Vorgehensweise aus:

  • Ein Shellskript lädt die in einer Textdatei genannten Recipes herunter – mit Hilfe des Calibre-Tools ebook-convert.
  • Danach werden die MOBI-Dateien in ein ZIP-Archiv gepackt…
  • …und dann per sendmail an die E-Mail-Adresse des Kindles geschickt. Dazu habe ich auf meinem Rechner Postfix installiert und konfiguriert.

Das Shellskript, das ich mir gebastelt habe und das ihr hier herunterladen könnt, bekommt beim Aufruf den Namen einer Textdatei übergeben. In dieser Textdatei stehen die Recipes, die verarbeitet werden sollen. Legt man mehrere solche Recipes-Textdateien an, kann man Verarbeitungen mit unterschiedlicher Frequenz einrichten.
Genauer gesagt führt man in diesen Textdateien pro Zeile ein Recipe auf: entweder den Namen eines Built-In-Recipes oder den Pfad zu einer eigenen, externen Recipe-Datei – deren Quelltext hat man zuvor per Copy & Paste aus Calibre herauskopiert. Bei den eigenen Recipes habe ich festgestellt, dass es Probleme macht, wenn man im Pfad mit dem Tilde-Zeichen (~) arbeitet, um das Home-Verzeichnis des Users zu nennen. Stattdessen sollte man also z.B. /home/gerald schreiben.

Der Download

Das Herunterladen per ebook-convert ist kein großer Zauber. In meinem vorigen Artikel hatte ich schon kurz beschrieben, wie das funktioniert. Hier noch einmal ein kurzes Beispiel für das Built-In-Recipe für die Süddeutsche Zeitung (kostenlose Variante). Das Recipe heißt sueddeutsche.recipe und findet sich, wie alle Built-In-Recipes unter /usr/share/calibre/recipes. Das Herunterladen und Konvertieren ins MOBI-Format funktioniert mit einem Aufruf nach folgendem Schema:

ebook-convert /usr/share/calibre/recipes/sueddeutsche.recipe /tmp/sz.mobi

Der Mailversand

Der große Knackpunkt war jedoch das Versenden der Mail an die Kindle-Adresse. Wie zuvor schon geschrieben, ging es mir darum, das Kennwort sicher zu „verstauen“. Mit der Installation von Postfix ist diese Voraussetzung gegeben. Ich habe Postfix so konfiguriert, dass alle Mails über mein GoogleMail-Konto (das Konto bzw. die Adresse, die als erlaubter Absender in der Amazon-Konto hinterlegt ist) versendet werden. Das war etwas „fummelig“, aber letztlich funktioniert es wunderbar. Eine gute Hilfestellung war dieser Beirag auf calomel.org (und speziell der Abschnitt zum Thema GoogleMail).

Doch auch nachdem Mails grundlegend über das Google-Konto versendet werden konnten, gab es noch einmal eine Schwierigkeit: das Versenden von Mails mit Datei-Anhängen von der Shell (und zwar so, dass Amazon die Anhänge auch verarbeiten kann).

Zunächst habe ich folgende Möglichkeit des Mailversands gefunden:

(echo "Mailtext"; uuencode /tmp/meinedatei.zip meinedatei.zip) | mail -s "Mailbetreff" meinkindle@free.kindle.com

Damit können, wie gesagt, Mails auch mit Anhang versendet werden – das funktioniert. Aber Amazon meldet dann immer, dass die Mail keinen Anhang beinhalten würde („Ihr E-Mail an Ihre/n Kindle enthielt keine Anhänge„).

Problem ist die Art der Kodierung. Der Anhang muss wohl zwingend als Base64-String kodiert werden. Und das wiederum geht wohl nicht ganz so einfach und komfortabel. Die einzige Möglichkeit, die ich gefunden habe (ich weiß leider nicht mehr, wo), ist dieses ellenlange Snippet (das ich so ähnlich auch in meinem Shellskript benutze):

mail_recipient=meinkindle@free.kindle.com
message=Mailtext
subject=Mailbetreff
attachment_file=/tmp/meinedatei.zip
(
echo "To: $mail_recipient"
echo "Subject: $subject"
echo "MIME-Version: 1.0"
echo 'Content-Type: multipart/mixed; boundary="-q1w2e3r4t5"
echo
echo '---q1w2e3r4t5'
echo "Content-Type: text/html"
echo "Content-Disposition: inline"
echo $message
echo '---q1w2e3r4t5'
echo 'Content-Type: application; name="'$(basename $attachment_file)'"
echo "Content-Transfer-Encoding: base64"
echo 'Content-Disposition: attachment; filename="'$(basename $attachment_file)'"'
uuencode --base64 $attachment_file $attachment_file
echo '---q1w2e3r4t5--'
) | /usr/sbin/sendmail $mail_recipient

Wie ihr seht, wird hier uuencode zum Encoden des Anhangs benutzt. Um das Tool benutzen zu können, müsst ihr einfach das Paket sharutils installieren.

Schließlich…

Mit diesen Infos solltet ihr euch also selbst ein Shellskript basteln könnten. Wer dazu keine Lust hat, der kann sich ja mal meines anschauen.

Wie immer bei solchen Artikeln möchte ich schließlich noch erwähnen, dass Tipps und Tricks zu meinem Shellskript und auch Hinweise auf andere, mögliche Vorgehensweisen willkommen sind.


Dieser Artikel wurde in der/den Kategorie(n) Planet-U, Programmierung und Skripting veröffentlicht und mit den Tags , , , versehen.

2 Kommentare zu Calibre: ohne GUI E-Papers beziehen – Teil 2

  1. Kommentar von boecko
    4. Januar 2012, 10:19 Uhr.

    kleine Anmerkung
    uuencode –base64 ist nicht das Standardargument

    Sowohl auf meinen Debian als auch unter OS X heißt der Parameter -m
    also müsste die Zeile so aussehen.
    uuencode -m file name

  2. Kommentar von Balthasar
    17. Mai 2013, 13:44 Uhr.

    Ich habe das Skript erweitert und nutze es in Verbindung mit OwnCloud und Calibre Content Server, um Newsfeeds auch in meine Calibre Library zu packen. Das ganze läuft auf einem Webserver und synchronisiert meine lokale Calibre Library, so dass ich nun Online Zugriff auf ebooks sowie Newsfeeds habe. Damit kann ich die generierten Dateien nicht nur auf dem Kindle nutzen sondern z.B. auch auf dem Smartphone.

    Details dazu in meinem Blog.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>