mail2mms.sh (raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
#!/bin/sh # Send an MMS message to your phone when new emails come in. # The message will have the number of new mails in the subject # and the body will contain the From and Subject fields of up to the 3 # most recent new mails. If the new mail count is above 3, there will also # be 'and more...' at the end. # Assumes you either have mbsync setup to sync your inbox folder, # or use -l if this machine is actually your mailserver # import the config file ./.config # addr=<the address the notification will appear to be sent from> # phone=<your phone number in email address form (eg, 9876543210@mms.att.net)> # inbox=<the location of the maildir folder corresponding to the inbox> # all other configuration can be done in your .mailrc . ./.config oldnew=0 summary() { i=0 for m in $(\ls -1r ${inbox}/new/*); do # disable glob expansion set -f # if there are more than 3 new messages, # just hint that there is more i=$((i + 1)) if [ ${i} -gt 3 ]; then echo "and more..." break fi # grab the From and Subject headers subject=$(grep ^Subject: ${m} | head -n 1) from=$(grep ^From: ${m} | head -n 1) # extract just the email address from the From header # ie, discard all tokens but the last # and remove angle brackets if present set -- $from while [ ${#} -gt 1 ]; do shift done echo -n $(echo ${@} | sed -e s/[\<\>]//g) # now append the message after discarding the Subject: key set -- $subject shift echo ": \"${@}\"" #reenable glob expansion set +f done } while true; do # Sync the inbox if we are not the mailserver if [ "$1" != "-l" ]; then mbsync -a fi # Count the number of new mails newnew=$(\ls -1 ${inbox}/new | wc -l) # If the number of new mails has increased if [ ${newnew} -gt ${oldnew} ]; then echo "From: ${addr} To: ${phone} Subject: new mail [${newnew}] $(summary)" | msmtp -t --read-envelope-from fi oldnew=${newnew} sleep 600 done |