home *** CD-ROM | disk | FTP | other *** search
/ PC Welt 2006 November (DVD) / PCWELT_11_2006.ISO / casper / filesystem.squashfs / usr / share / doc / cupsys / examples / mailto < prev    next >
Encoding:
Text File  |  2006-08-30  |  3.9 KB  |  162 lines

  1. #!/usr/bin/python
  2.  
  3. #
  4. # $Id: mailto,v 1.3 2003/01/02 17:59:19 gurubert Exp $
  5. #
  6.  
  7. #
  8. # This is a mailto backend for CUPS (www.cups.org)
  9. #
  10. # (C) 2002 Robert Sander <robert.sander@epigenomics.com>
  11. #
  12. # Released under GPL
  13. #
  14. # NO WARRANTY AT ALL
  15. #
  16.  
  17. import sys, os, tempfile, MimeWriter, mimetools, mimetypes
  18.  
  19. log = "\nLog:\n"
  20.  
  21. def guess_type(file):
  22.     global log
  23.     
  24.     type, enc = mimetypes.guess_type(file)
  25.     if (not type) or (type == 'application/octet-stream'):
  26.         enc = None
  27.         try:
  28.             type = os.popen("/usr/bin/file -bi %s 2> /dev/null" % file).read().rstrip()
  29.             if type == "" or type == "data":
  30.                 type = "application/octet-stream"
  31.         except:
  32.             type = "application/octet-stream"
  33.     if log:
  34.         log = "%stype is %s\n" % (log, type)
  35.     return (type, enc)
  36.  
  37. def guess_extension(mimetype):
  38.     return(mimetypes.guess_extension(mimetype))
  39.  
  40. argc = len(sys.argv)
  41.  
  42. if argc == 1:
  43.     print "network mailto \"Unknown\" \"SMTP\""
  44.     sys.exit(0)
  45.  
  46. sys.stderr.write("INFO: mailto argv[%s] =" % argc)
  47. if log:
  48.     log = "%smailto argv[%s] =" % (log, argc)
  49. for arg in sys.argv[1:]:
  50.     sys.stderr.write(" '%s'" % arg)
  51.     if log:
  52.         log = "%s '%s'" % (log, arg)
  53. sys.stderr.write("\n")
  54. if log:
  55.     log = "%s\n" % log
  56.  
  57. if argc < 6 or argc > 7:
  58.     sys.stderr.write("ERROR: %s job-id user title copies options [file]\n" % sys.argv[0])
  59.     sys.exit(1)
  60.  
  61. jobid = sys.argv[1]
  62. user = sys.argv[2]
  63. title = sys.argv[3]
  64. opts = sys.argv[5].split(" ")
  65.  
  66. if argc == 7:
  67.     sys.stderr.write("INFO: file is %s\n" % sys.argv[6])
  68.     if log:
  69.         log = "%sfile is %s\n" % (log, sys.argv[6])
  70.     infilename = sys.argv[6]
  71. else:
  72.     infilename = tempfile.mktemp(".mailto")
  73.     try:
  74.         infile = open(infilename, "w")
  75.     except:
  76.         sys.stderr.write("ERROR: unable to create tmp file %s\n" % infilename)
  77.         sys.exit(1)
  78.     sys.stderr.write("INFO: file is stdin\n")
  79.     try:
  80.         infile.write(sys.stdin.read())
  81.     except:
  82.         sys.stderr.write("ERROR: unable to copy into tmpfile\n")
  83.         sys.exit(1)
  84.     infile.close()
  85.     if log:
  86.         log = "%scopied stdin to %s\n" % (log, infilename)
  87.  
  88. infile = open(infilename, "r")
  89.  
  90. sys.stderr.write("INFO: creating tmp mail file\n")
  91.  
  92. try:
  93.     mimemailfile = tempfile.TemporaryFile()
  94.     mimemail = MimeWriter.MimeWriter(mimemailfile)
  95. except:
  96.     sys.stderr.write("ERROR: unable to create tmp file for MIME_MAIL\n")
  97.     sys.exit(1)
  98.  
  99. mailto = None
  100. mailfrom = None
  101. for opt in opts:
  102.     if log:
  103.         log = "%sopt = '%s'\n" % (log, opt)
  104.     if opt[:7] == "mailto=":
  105.         mailto = opt[7:]
  106.         if log:
  107.             log = "%smailto = '%s'\n" % (log, mailfrom)
  108.     if opt[:9] == "mailfrom=":
  109.         mailfrom = opt[9:]
  110.         if log:
  111.             log = "%smailfrom = '%s'\n" % (log, mailfrom)
  112. if not mailto:
  113.     if user:
  114.         mailto = user
  115.     else:
  116.         mailto = mailfrom
  117. else:
  118.     if not mailfrom:
  119.         if user:
  120.             mailfrom = user
  121. if not mailfrom:
  122.     mailfrom = "lp"
  123.  
  124. # Essential lines to put into the header of a MIME mail.
  125. mimemail.addheader("From", mailfrom)
  126. mimemail.addheader("To", mailto)
  127. mimemail.addheader("Subject", title)
  128. mimemail.addheader("MIME-Version", "1.0")
  129. if mailto != user and mailfrom != user:
  130.     mimemail.addheader("X-CUPS-mailto-started-by", user)
  131.  
  132. mimemail.startmultipartbody("mixed")
  133.  
  134. body = mimemail.nextpart()
  135.  
  136. body.addheader("Content-Transfer-Encoding", "8bit")
  137.  
  138. body.startbody("text/plain").write("You printed %s with jobid %s\n%s" % (title, jobid, log))
  139.  
  140. attachment = mimemail.nextpart()
  141. type, enc = guess_type(infilename)
  142. ext = guess_extension(type)
  143. if not ext:
  144.     ext = ""
  145. attachment.addheader("Content-Transfer-Encoding", "base64")
  146. att = attachment.startbody('%s; name="%s%s"' % (type, os.path.basename(title), ext))
  147. mimetools.encode(infile, att, "base64")
  148. mimemail.lastpart()
  149.  
  150. mimemailfile.seek(0)
  151.  
  152. os.popen("/usr/sbin/sendmail -t -f%s" % mailfrom, "w").write(mimemailfile.read())
  153.  
  154. att.close()
  155. infile.close()
  156. mimemailfile.close()
  157.  
  158. if argc == 6:
  159.     os.unlink(infilename)
  160.  
  161. sys.exit(0)
  162.