MAILPLATEDIR = os.path.expanduser(MAILPLATEDIR)
 
 # defaults
-config = { 'default_template' : ''
+config = { 'default_template' : None
          , 'template_path' : TEMPLATEDIR
          }
 helpers = { 'get_quote' : 'fortune -s' }
         f = file(CONFFILE, 'w')
         f.write('# mailplate configuration\n[%s]\n' % SECTION_GENERAL)
         for kvpair in config.iteritems():
-            if len(kvpair[1]) > 0:
+            if kvpair[1] and len(kvpair[1]) > 0:
                 f.write('%s = %s\n' % kvpair)
 
         if len(helpers) > 0:
     except ConfigParser.NoSectionError, ConfigParser.MissingSectionHeaderError:
         err("E: no section '%s' in %s" % (SECTION_GENERAL, CONFFILE))
         sys.exit(posix.EX_CONFIG)
+    except ConfigParser.NoOptionError:
+        continue
     except ConfigParser.DuplicateSectionError, ConfigParser.ParseError:
         err('E: parse error on %s' % CONFFILE)
         sys.exit(posix.EX_CONFIG)
 helpers.update(parser.items(SECTION_HELPERS))
 
 TPATH = os.path.expanduser(config['template_path'])
+if not os.path.isdir(TPATH):
+    os.mkdir(TPATH, 0700)
 
 ###
 ### COMMAND LINE PARSING
             best_score = (score, tf, vars)
 
     templname = best_score[1]
+
+    if templname is None:
+        err('E: could not determine a template to use and no default is set')
+        sys.exit(posix.EX_CONFIG)
+
     print >>sys.stderr, \
             'I: Chose profile %s with score %d.' % (templname, best_score[0])
     vars = best_score[2]
 
 # now read in the template
-templ = file(os.path.join(TPATH, templname), 'r', 1)
+templpath = os.path.join(TPATH, templname)
+
+if not os.path.isfile(templpath):
+    err('E: not a template: ' + templpath)
+    sys.exit(posix.EX_OSFILE)
+
+elif not os.access(templpath, os.R_OK):
+    err('E: template ' + templpath + ' could not be read.')
+    sys.exit(posix.EX_OSFILE)
+
+templ = file(templpath, 'r', 1)
+
 for line in templ:
     if not options.auto and line[0] == REGEXPCHAR:
         # obtain variables from the regexps