all repos — mail2mms @ eb82854cc04a8c3772a3b4b617b2c795952fc70e

YOU'VE GOT MAIL! notify via MMS of new mail in your inbox

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
#!/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

    # 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 ": \"${@}\""
  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 "$(summary)" \
    | mail -r ${addr} \
      -s "new mail [${newnew}]" \
      ${phone}
  fi

  oldnew=${newnew}
  sleep 10m
done