summaryrefslogtreecommitdiff
path: root/vendor/Twisted-10.0.0/twisted/mail/bounce.py
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/Twisted-10.0.0/twisted/mail/bounce.py')
-rw-r--r--vendor/Twisted-10.0.0/twisted/mail/bounce.py61
1 files changed, 61 insertions, 0 deletions
diff --git a/vendor/Twisted-10.0.0/twisted/mail/bounce.py b/vendor/Twisted-10.0.0/twisted/mail/bounce.py
new file mode 100644
index 0000000000..d57c495ec7
--- /dev/null
+++ b/vendor/Twisted-10.0.0/twisted/mail/bounce.py
@@ -0,0 +1,61 @@
+# -*- test-case-name: twisted.mail.test.test_bounce -*-
+#
+# Copyright (c) 2001-2004 Twisted Matrix Laboratories.
+# See LICENSE for details.
+
+
+import StringIO
+import rfc822
+import string
+import time
+import os
+
+
+from twisted.mail import smtp
+
+BOUNCE_FORMAT = """\
+From: postmaster@%(failedDomain)s
+To: %(failedFrom)s
+Subject: Returned Mail: see transcript for details
+Message-ID: %(messageID)s
+Content-Type: multipart/report; report-type=delivery-status;
+ boundary="%(boundary)s"
+
+--%(boundary)s
+
+%(transcript)s
+
+--%(boundary)s
+Content-Type: message/delivery-status
+Arrival-Date: %(ctime)s
+Final-Recipient: RFC822; %(failedTo)s
+"""
+
+def generateBounce(message, failedFrom, failedTo, transcript=''):
+ if not transcript:
+ transcript = '''\
+I'm sorry, the following address has permanent errors: %(failedTo)s.
+I've given up, and I will not retry the message again.
+''' % vars()
+
+ boundary = "%s_%s_%s" % (time.time(), os.getpid(), 'XXXXX')
+ failedAddress = rfc822.AddressList(failedTo)[0][1]
+ failedDomain = string.split(failedAddress, '@', 1)[1]
+ messageID = smtp.messageid(uniq='bounce')
+ ctime = time.ctime(time.time())
+
+ fp = StringIO.StringIO()
+ fp.write(BOUNCE_FORMAT % vars())
+ orig = message.tell()
+ message.seek(2, 0)
+ sz = message.tell()
+ message.seek(0, orig)
+ if sz > 10000:
+ while 1:
+ line = message.readline()
+ if len(line)<=1:
+ break
+ fp.write(line)
+ else:
+ fp.write(message.read())
+ return '', failedFrom, fp.getvalue()