bash の Debian メールから PDF 一括抽出

bash の Debian メールから PDF 一括抽出

私が達成したいもの:Remarkable 2タブレットにPDF文書を電子メールで送信しようとしています。

私はこれを行う方法を試しています:

  1. 設定rmfakecloud:サーバー上で実行され、公式のRemarkableクラウドシステムをエミュレートしてデータを制御できるソフトウェア

  2. 私はコマンドラインで公式のRemarkable 2クラウドと対話できるソフトウェアを設定しましたrmapirmfakecloud

  3. Gmailでメールアカウントを設定しました[Eメール保護]安全性の低いアプリケーションログインを有効にする(例:2番目の認証要素なしでログインを許可する)

  4. 私は短いbashスクリプトを書いています(ChatGPTの助けを借りて認めなければなりません):

    • そのアカウントのすべての電子メールをダウンロードしてください。
    • 送信者が自分のメールアカウントと一致していることを確認してください([Eメール保護])
    • メールからファイルを抽出する(PDFの場合)<--- [これは動作しません]
    • 次のコマンドを使用して、抽出したファイルをマイタブレットのクラウドにアップロードします。rmapi

私の技術的アプローチ:

#!/bin/bash
# The parameters for offlineimap are saved in /root/.offlineimaprc

# Define the senders whose attachments you want to save
SENDERS=("[email protected]" "[email protected]")

# Define the directory where attachments will be saved
SAVE_DIR="/root/sync/sync"

# Define the command to upload PDFs to reMarkable
RMAPI_CMD="RMAPI_CONFIG=/root/.config/rmapi/rmapi.conf RMAPI_HOST=https://tablet.mydomain.com /root/go/bin/rmapi -ni put"

# Sync emails using offlineimap
offlineimap -o

# Extract PDF attachments and upload to reMarkable
for email in /root/Maildir/\[Gmail\].All\ Mail/new/*; do
  sender=$(grep -E '^From:' "$email" | sed -e 's/^From: //')
  if [[ ${SENDERS[*]} =~ $sender ]]; then
    munpack -q -t "$email" -C "$SAVE_DIR" \
      | grep -E '^Attachment' \
      | sed -e 's/^Attachment //' \
      | while read -r filename; do
        if [[ -f "$SAVE_DIR/$filename" ]]; then
          $RMAPI_CMD "$SAVE_DIR/$filename"
          if [[ -f "$SAVE_DIR/$filename" ]]; then
            rm "$SAVE_DIR/$filename"
          fi
        fi
      done
  fi
done

何が間違っていますか:

root@tabletserver:~$ ./mail.sh
OfflineIMAP 7.3.0
  Licensed under the GNU GPL v2 or any later version (with an OpenSSL exception)
imaplib2 v3.05, Python v3.9.2, OpenSSL 1.1.1n  15 Mar 2022
Account sync Gmail:
 *** Processing account Gmail
 Establishing connection to imap.gmail.com:993 (Remote)
Folder [Gmail]/All Mail [acc: Gmail]:
 Syncing [Gmail]/All Mail: Gmail -> Maildir
Folder [Gmail]/Drafts [acc: Gmail]:
 Syncing [Gmail]/Drafts: Gmail -> Maildir
Folder [Gmail]/Important [acc: Gmail]:
 Syncing [Gmail]/Important: Gmail -> Maildir
Folder [Gmail]/Sent Mail [acc: Gmail]:
 Syncing [Gmail]/Sent Mail: Gmail -> Maildir
Folder [Gmail]/Spam [acc: Gmail]:
 Syncing [Gmail]/Spam: Gmail -> Maildir
Folder [Gmail]/Starred [acc: Gmail]:
 Syncing [Gmail]/Starred: Gmail -> Maildir
Folder [Gmail]/Trash [acc: Gmail]:
 Syncing [Gmail]/Trash: Gmail -> Maildir
Folder INBOX [acc: Gmail]:
 Syncing INBOX: Gmail -> Maildir
Account sync Gmail:
 *** Finished account 'Gmail' in 0:01

私の理解に問題があります。

私が知っている限り、スクリプトはgmail imapサーバーからメールをダウンロードし、ファイルが提供されるとクラウドサーバーにファイルをアップロードするように管理します。

うまくいかない、電子メールからPDFファイルを抽出することです。私は本当に何が間違っているのか、より簡単な方法が何であるかわかりません。

スクリプトの実行方法:

このスクリプトを悪魔化してsystemdサービスとして実行する予定です。

関連情報