Write dockerfile for imap-download
This commit is contained in:
parent
79178b9ca8
commit
426e8cad23
5 changed files with 76 additions and 0 deletions
|
@ -85,6 +85,7 @@ UID | GID | Container | Notes
|
|||
95 | 95 | shiori | Shiori bookmark system, built from source
|
||||
999 | 994 | certbot | The same user & group as fabio, because file permissions
|
||||
2100 | 2100 | redis |
|
||||
10000 | 10000 | imap-download | Uses fetchmail to download emails and extract attachments
|
||||
|
||||
## Development Notes
|
||||
|
||||
|
|
21
images/imap-download/Dockerfile
Normal file
21
images/imap-download/Dockerfile
Normal file
|
@ -0,0 +1,21 @@
|
|||
ARG REPO_LOCATION
|
||||
# ARG BASE_VERSION
|
||||
|
||||
FROM ${REPO_LOCATION}minideb
|
||||
|
||||
RUN install_packages ca-certificates fetchmail procmail inotify-tools mpack
|
||||
RUN mkdir /srv/home \
|
||||
&& ln -s /mnt/fetchmailrc /srv/home/.fetchmailrc \
|
||||
&& mkdir /tmp/maildir
|
||||
|
||||
ENV HOME /srv/home
|
||||
|
||||
COPY ./procmail.conf /srv/procmail.conf
|
||||
COPY ./run.sh /srv/run.sh
|
||||
|
||||
VOLUME /mnt/fetchmailrc
|
||||
VOLUME /mnt/output
|
||||
|
||||
USER 10000:10000
|
||||
|
||||
ENTRYPOINT [ "/srv/run.sh" ]
|
5
images/imap-download/procmail.conf
Normal file
5
images/imap-download/procmail.conf
Normal file
|
@ -0,0 +1,5 @@
|
|||
CORRECTHOME=/tmp/maildir
|
||||
MAILDIR=$CORRECTHOME/
|
||||
|
||||
:0
|
||||
Mail/
|
48
images/imap-download/run.sh
Executable file
48
images/imap-download/run.sh
Executable file
|
@ -0,0 +1,48 @@
|
|||
#!/usr/bin/env bash
|
||||
|
||||
temp_dir="$(mktemp --tmpdir -d "imap-download-XXXXXXX")";
|
||||
on_exit() {
|
||||
rm -rf "${temp_dir}";
|
||||
}
|
||||
trap on_exit EXIT;
|
||||
|
||||
do_fetchmail() {
|
||||
fetchmail --mda "/usr/bin/procmail -m /srv/procmail.conf";
|
||||
}
|
||||
|
||||
log_msg() {
|
||||
echo "$(date -u +"%Y-%m-%d %H:%M:%S") imap-download: $*";
|
||||
}
|
||||
|
||||
dir_newmail="/tmp/maildir/Mail/new";
|
||||
target_dir="/mnt/output";
|
||||
|
||||
do_attachments() {
|
||||
while :; do # : = infinite loop
|
||||
# Wait for an update
|
||||
# inotifywait's non-0 exit code forces an exit for some reason :-/
|
||||
inotifywait -qr --event create --format '%:e %f' "${dir_newmail}";
|
||||
|
||||
while read -r filename; do
|
||||
log_msg "Processing email ${filename}";
|
||||
|
||||
# Move the email to a temporary directory for processing
|
||||
mv "${filename}" "${temp_dir}";
|
||||
|
||||
# Unpack the attachments
|
||||
munpack -C "${temp_dir}" "${filename}";
|
||||
# Delete the original email file and any description files
|
||||
rm "${filename}";
|
||||
find "${temp_dir}" -iname '*.desc' -delete;
|
||||
|
||||
# Move the attachment files to the output directory
|
||||
while read -r attachment; do
|
||||
log_msg "Extracted attachment ${attachment}";
|
||||
mv "${attachment}" "${target_dir}";
|
||||
done < <(find "${temp_dir}" -type f);
|
||||
done < <(find "${dir_newmail}" -type f);
|
||||
done
|
||||
}
|
||||
|
||||
do_fetchmail &
|
||||
do_attachments
|
1
images/imap-download/type.txt
Normal file
1
images/imap-download/type.txt
Normal file
|
@ -0,0 +1 @@
|
|||
docker
|
Loading…
Reference in a new issue