Как я могу пометить почтовое сообщение в скрипте bash? - PullRequest
0 голосов
/ 29 мая 2020

У меня есть сценарий bash под названием extract-pdf-attachments. sh, который автоматически сохраняет вложение электронной почты (pdf) для сопоставления с qmail и реформированием. см.: Вопрос 58188368 Stackoverflow

Скрипт работает очень хорошо.

Теперь я хочу также пометить каждое сообщение в формате pdf из этого скрипта. Мысль о том, чтобы сделать это с помощью 'sed 's/\(^Subject:\).*/\1 [Settled]/' "$mailmessage"?'

, похоже, мне не удалось заставить его работать, поэтому мой вопрос в том, как я могу изменить тему сообщения с помощью pdf в сценарии. Могу ли я использовать что-то вроде: sed 's/\(^Subject:\)/\1 [Settled]/' "$mailmessage"

См. Строку # 58 sed 's/\(^Subject:\)/\1 [Settled]/' "$mailmessage"

Кажется, это не работает.

Скрипт bash: (см. ссылка то же, что и выше)

#!/usr/bin/env bash

# This script process mail message attachments from stdin MIME message
# Extract all PDF files attachments
# and return the MIME message to stdout for further processing

# Ensure all locale settings are set to C, to prevent
# reformime from failing MIME headers decode with
# [unknown character set: ANSI_X3.4-1968]
# See: https://bugs.gentoo.org/304093
export LC_ALL=C LANG=C LANGUAGE=C

# Setting the destination path for saved attachments
attachements='/home/users/name/home'

trap 'rm -f -- "$mailmessage"' EXIT # Purge temporary mail message

# Create a temporary message file
mailmessage="$(mktemp)"

# Save stdin message to tempfile
cat > "$mailmessage"

# Iterate all MIME sections from the message
while read -r mime_section; do

  # Get all section info headers
  section_info="$(reformime -s "$mime_section" -i <"$mailmessage")"

  # Parse the Content-Type header
  content_type="$(grep 'content-type' <<<"$section_info" | cut -d ' ' -f 2-)"

  # Parse the Content-Name header (if available)
  content_name="$(grep 'content-name' <<<"$section_info" | cut -d ' ' -f 2-)"

  # Decode the value of the Content-Name header
  content_name="$(reformime -c UTF-8 -h "$content_name")"

  if [[ $content_type = "application/pdf" || $content_name =~ .*\.[pP][dD][fF] ]]; then
    # Attachment is a PDF
    if [ -z "$content_name" ]; then
      # The attachment has no name, so create a random name
      content_name="$(mktemp --dry-run unnamed_XXXXXXXX.pdf)"
    fi
    # Prepend the date to the attachment filename
    filename="$(date +%Y%m%d)_$content_name"

    # Save the attachment to a file
    reformime -s "$mime_section" -e <"$mailmessage" >"$attachements/$filename"

    # Prepend the text settled to the mail subject
    sed 's/\(^Subject:\)/\1 [Afgehandeld]/' "$mailmessage"

  fi

done < <(reformime < "$mailmessage") # reformime list all mime sections

cat <"$mailmessage" # Re-inject the message to stdout for further processing
...