No means of message notification is perfect, but a Skytel two-way pager in combination with an Iridium satellite pager can come close for those that spend most but not all of their time in a two way coverage area. Both units use a long-lasting AA battery, so daily charging is not required. A case such as those made by Aquapac may be used to keep the pagers physically together and protected from the elements.
It is a simple matter to forward messages to both of these pagers, however that will often result in dual notification which can get old real fast! The Python script below will read an email message and send it to the Skytel pager using the SNPP protocol. The script then sleeps for some time to allow the message to be delivered. If the SNPP "MSTA" command then reports that the message is still not delivered then the message is also sent to Iridium. This keeps the number of Iridium pages down both for sanity and also to keep you under the current 150 message hard monthly limit set by Iridium. This script can be referenced under Unix from the .forward file of the paging account... of course other methods for getting the incoming message to the script will work just fine. Your Python installation may not include SNPP support, in which case you can grap snpplib. If you need a Unix shell account to host this script then let me know-- we'll hook you up somehow.
Please keep in mind that the script is given as a starting point-- you will almost certainly want to modify it to suit your needs! If you do anything really clever then please report back to have your result posted on this page.
If you are out in the wild then you may not want to place an expensive satellite call (if you have an Iridium or Globalstar handset) just to check voicemail. To get the actual content of the voicemail delivered to your pager(s) then phonewire.com has a cost-effective message transcription service.
Please note that if you do not also have an Iridium phone with "follow me paging" then you'll need to manually adjust the message delivery area (MDA) of your Iridium pager if you travel far and wide. This method should also work for other two-way devices that support SNPP-- Motorola devices from Nextel come to mind-- however some of these devices require daily charging.
#!/usr/local/bin/python
import sys
sys.path.append('/path/to/snpplib-1.1')
import email
import snpplib
import smtplib
import string
import time
import os
# set up logging
fp = open("/path/to/progression.log",'a')
fp.write("%i: -------\n" % (os.getpid()))
fp.write(("%i: incoming message at " + time.asctime(time.localtime(time.time())) + "\n") % (os.getpid()))
# parse the incoming email/page
msg = email.message_from_file( sys.stdin )
# send page to Skytel pager
s = snpplib.SNPP("snpp.skytel.com")
s.twoway()
s.pager("11111111")
addr = email.Utils.parseaddr(msg['From'])[1] # only the actual address
s.docmd("RPLY",addr)
# hack out meaningless subjects from Phonewire.com
if msg['Subject'] == "9543":
del msg['Subject']
msg['Subject'] = ""
if msg.is_multipart():
pay = msg['Subject'] + "|" + msg.get_payload(0).get_payload(decode=1)
else:
pay = msg['Subject'] + "|" + msg.get_payload()
# might want to see the address if not Phonewire...
if addr != "call@phonewire.net":
pay = addr + "|" + pay
fp.write(("%i: " + pay[0:450] + "\n") % (os.getpid()))
s.data(pay[0:450]) # 450 chars instead of 500 to be safe
id = string.split( s.send()[1] )
s.quit()
fp.write(("%i: sent " + id[1] + "\n") % (os.getpid()))
fp.flush()
# wait for pager to get message -- 2 minutes
time.sleep(120)
fp.write(("%i: checking status of " + id[1] + " at " + time.asctime(time.localtime(time.time())) + "\n") % (os.getpid()))
# check status
s = snpplib.SNPP("snpp.skytel.com")
mstat = string.split( s.mstatus("11111111",id[1])[1] )
s.quit()
# wasn't received yet, so send Iridium page
fp.write(("%i: mstat[4] is >" + mstat[4] + "<\n") % (os.getpid()))
if mstat[4] != "Delivered,":
fp.write(("%i: NOT YET RECEIVED -- sending to Iridium\n") % (os.getpid()))
server = smtplib.SMTP('localhost')
del msg['To']
msg['To'] = "881611111111@msg.iridium.com"
server.sendmail(msg['From'], msg['To'], pay[0:160]) # Iridium does 160
server.quit()
fp.write("%i: ALL DONE\n" % (os.getpid()))
fp.close()
# eof