1 # -*- test-case-name: twisted.mail.test.test_bounce -*-
3 # Copyright (c) Twisted Matrix Laboratories.
4 # See LICENSE for details.
13 from twisted.mail import smtp
16 From: postmaster@%(failedDomain)s
18 Subject: Returned Mail: see transcript for details
19 Message-ID: %(messageID)s
20 Content-Type: multipart/report; report-type=delivery-status;
21 boundary="%(boundary)s"
28 Content-Type: message/delivery-status
29 Arrival-Date: %(ctime)s
30 Final-Recipient: RFC822; %(failedTo)s
33 def generateBounce(message, failedFrom, failedTo, transcript=''):
36 I'm sorry, the following address has permanent errors: %(failedTo)s.
37 I've given up, and I will not retry the message again.
40 boundary = "%s_%s_%s" % (time.time(), os.getpid(), 'XXXXX')
41 failedAddress = rfc822.AddressList(failedTo)[0][1]
42 failedDomain = failedAddress.split('@', 1)[1]
43 messageID = smtp.messageid(uniq='bounce')
44 ctime = time.ctime(time.time())
46 fp = StringIO.StringIO()
47 fp.write(BOUNCE_FORMAT % vars())
54 line = message.readline()
59 fp.write(message.read())
60 return '', failedFrom, fp.getvalue()