sendmail.py
上传用户:gyjinxi
上传日期:2007-01-04
资源大小:159k
文件大小:3k
源码类别:

WEB邮件程序

开发平台:

Python

  1. try: from cStringIO import StringIO
  2. except: from StringIO import StringIO
  3. from smtplib import SMTP
  4. from mimetools import choose_boundary, encode
  5. from string import split, join, replace, strip
  6. import mimetypes, os
  7. from Message import *
  8. from bobomailrc import *
  9. from bobomailrc import __version__
  10. mimetypes.init(["/etc/mime.types", bm_mimetypes])
  11. def makePart(body, encoding):
  12. msg = Message(StringIO())
  13. msg["Content-Transfer-Encoding"] =  encoding
  14. out = StringIO()
  15. mimetools.encode(StringIO(body), out, encoding)
  16. msg.body = out.getvalue()
  17. if encoding == "quoted-printable":
  18. lines = split(msg.body, "n")
  19. for i in xrange(len(lines)):
  20. if lines[i] and lines[i][:5] == 'From ':
  21. lines[i] = "=%02x" % ord("F") + lines[i][1:]
  22. msg.body = join(lines, "n")
  23. return msg
  24. class SentFailed:
  25. def __init__(self, e, c, r):
  26. self.email, self.code, self.reason = e, c, r
  27. def __repr__(self):
  28. return str((self.code, self.reason, self.email))
  29. def sendmail(From, To, Cc=None, Bcc=None, Subject="", Body="", File=None, Filename=""):
  30. text = makePart(Body, "quoted-printable")
  31. text["Content-Type"] = "text/plain; charset=iso8859-1"
  32. if File is not None:
  33.     data = File.read()
  34.     if data:
  35. attach = makePart(File.read(), "base64")
  36. ext = os.path.splitext(Filename)[1]
  37. ctype = mimetypes.guess_type(ext)[0] or "application/octet-stream"
  38. attach["Content-Type"] = ctype
  39. attach["Content-Disposition"] = 'attachment; filename="%s"' % Filename
  40. msg = Message(StringIO())
  41. msg.boundary = choose_boundary()
  42. msg["Content-Type"] = 'multipart/mixed; boundary="%s"' % msg.boundary
  43. msg.parts.extend([text, attach])
  44.     else: msg = text
  45. else: msg = text
  46. msg["From"] = From
  47. msg["X-Mailer"] = "BoboMail.py/%s" % __version__
  48. msg["To"] = To
  49. if Cc: msg["Cc"] = Cc
  50. if Bcc: msg["Bcc"] = Bcc
  51. msg["Subject"] = Subject
  52. msg["Mime-Version"] = "1.0"
  53. addrs = replace("%s, %s, %s" % (To, Cc or "", Bcc or ""), ";", ",")
  54. ToList = map(strip, split(addrs, ","))
  55. while "" in ToList: ToList.remove("")
  56. return sendMessage(From, ToList, msg)
  57. def sendMessage(From, ToList, msg):
  58. errors = []
  59. s = SMTP(smtp_host)
  60. failed = s.sendmail(From, ToList, str(msg))
  61. s.quit()
  62. for email, (code, reason) in failed.items():
  63. errors.append(SentFailed(email, code, reason))
  64. return errors
  65. if __name__ == "__main__":
  66. print sendmail(
  67. "hs@cs.uni-ol.de", "henning@localhost", None, None, "Testmail",
  68. "From Hallo LeutenGru