Doorgaan naar hoofdcontent

Passing e-mails to a shell script [1/2] with Postfix E-Mail Server to process attachments

1] Passing e-mails to a shell script opens up a brave new world of possibilities

If you have a Postfix mail server setup and running as MTA(Mail Transfer Agent), or even as a LDA (Local Delivery Agent)
it is really easy to pipe a mail to your shell script.
you open up the aliases file mostly it is in /etc/aliases:
    mailer-daemon: postmaster
    postmaster: root
    nobody: root
    hostmaster: root
    usenet: root
    news: root
    webmaster: user1
    www: user1
    ftp: user1
    abuse: root

        So you see you have a bunch of aliases the first part is the email address you sent to e.g : www@yourdomain.org
      after the ":" is where the mail gets delivered so in our example the mail will be delivered to user1

      if you want to redirect to your script change line 8 of the aliases file into:
      www : |"/home/user1/myscript.sh/" user1
      this will pipe all emails addressed to  "www"  to your script


      2] Use Munpack to save the attachments of e-mails
      One great use of the redirection is to extract the attachments of the e-mails to a separate directory while still preserving the original mail.

      For this use I use munpack to extract the attachments.
      munpack is part of the mpack package which can be installed on
      ubuntu: apt install mpack
      Arch : yay -S aur/mpack 

      Usage of: munpack email -C destdirectory

      3] Example script extracting the attachments
      myscript.sh

      #! /bin/bash
      /usr/bin/munpack -C /home/user1/attachments/ > /home/user1/munpack.log

      make shure your script is executable by the postfix user

      Since you pipe your incoming mail to the script munpack reads from stdin.


      4] Processing the new created attachments
      We can go and take it a step further and parse our newly created attachment to for example a php script.
       Here is one little tricky part if your e-mail contains more than one attachment you will need to filter out the one you need.
      Here is my way to do this.
      I use the munpack.log file which contains errors ,and notices from munpack and also the name of the attachments.
      So I take this file read it line by line and select the one I need e.g. I need the first html file. This must be parsed by a php script.
      So we can add this to our script:

      while read p; do
          if [[ $p == *"html"* ]]
          then
              IFS=' (' read -a array <<< "$p"
      cat "/home/user1/attachments/${array[0]}" | /usr/bin/php /home/user1/parse_mail.php > /home/user1/parse_mail.log
          fi
          done </home/user1/munpack.log

       
       5] The complete example script:


      #! /bin/bash
      /usr/bin/munpack -C /home/user1/attachments/ > /home/user1/munpack.log
       while read p; do
          if [[ $p == *"html"* ]]
          then
              IFS=' (' read -a array <<< "$p"
      cat "/home/user1/attachments/${array[0]}" | /usr/bin/php /home/user1/parse_mail.php > /home/user1/parse_mail.log
          fi
          done </home/user1/munpack.log



      Reacties

      Populaire posts van deze blog

      Add Costum Keyboard Layout to XFCE

      How to create this keyboard layout for Xfce : Works also on Mate!!!!   It is a lightly modified version of the dvorak programmers layout. I changed the lower left row. So you can easily undo, cut, copy & paste         with your left hand and keep the other hand on your mouse. Step 1. Edit file: /usr/share/X11/xkb/symbols/us Insert this snippit: // programmer Dvorak wim's style, by Wim Stockman <wim.stockman at gmail dot com> // Main features: Numbers are in shift position (like French), symbols have been // switch position of z x c v to the bottom left for easy shortcut handling partial alphanumeric_keys xkb_symbols "dvp-wim" { include "us(dvorak)" name[Group1] = "English (programmer Dvorak Wims style ZXCV)"; // Unmodified Shift AltGr Shift+AltGr // symbols row, left side key <TLDE> { [ dollar, asciitilde, dead_tilde ] }; key <AE01> { [ ampersand, percent ] }; key <AE02> { [ bracketleft, 7, currency ],

      Awk Tips & Tricks: print a "," at the end of the line EXCEPT the last one!

      Small AWK idiomatic tip. If you want to add a char at the end of each line.EXCEPT the last one. for instance you are generating an array. awk NR>1 {printf(",\n");} {printf($0);} TLDR; The NR stands for number record, the line it is processing usually. the printf statement prints out without the ORS( output record separator) usually newline (\n) char. END;

      Converting HEIC , HEIF files with Image Magick

      Convert alle HEIC files in a directory to PNG file First off all you have to compile imagemagick from source with heic support and some other libs: Here are the instructions for this: cd /usr/src sudo git clone https://github.com/strukturag/libde265.git sudo git clone https://github.com/strukturag/libheif.git cd libde265/ sudo ./autogen.sh sudo ./configure sudo make sudo make install cd /usr/src/libheif/ sudo ./autogen.sh sudo ./configure sudo make sudo make install cd /usr/src/ sudo wget https://www.imagemagick.org/download/ImageMagick.tar.gz sudo tar xf ImageMagick.tar.gz cd ImageMagick-7* sudo ./configure --with-heic=yes sudo make sudo make install sudo ldconfig if you want to convert all files in a directory to png from heic. For some reason mogrify from imagemagick refuses. So I had to do it with convert: for file in *.HEIC; do convert $file $file.PNG; done The only drawback with convert is that it changes the date of the new files to th