def guessSentTime(self, default=None): """ Try to determine the time this message claims to have been sent by analyzing various headers. @return: a L{Time} instance, or C{None}, if we don't have a guess. """ try: sentHeader = self.getHeader(u'date') except equotient.NoSuchHeader: sentHeader = None else: try: return Time.fromRFC2822(sentHeader) except ValueError: pass for received in list(self.getHeaders(u'received'))[::-1]: lines = received.value.splitlines() if lines: lastLine = lines[-1] parts = lastLine.split('; ') if parts: date = parts[-1] try: when = rfc822.parsedate(date) if when is None: continue except ValueError: pass else: return Time.fromStructTime(when) return default
def test_attributes(self): """ Verify all the attributes directly on the Message class are preserved by the upgrade function. """ for i, msg in enumerate(self.messageList): # The code at the revision which this stub requires randomly # mangles the sentWhen of the 3rd and 4th message (because they're # drafts), so we can't reasonably test them, except to make sure # they're not none. if i == 3 or i == 4: self.assertNotEqual(msg.sentWhen, None) else: self.assertEqual( msg.sentWhen, Time.fromRFC2822("Thu, 26 Apr 2001 22:01:%d GMT" % (i,))) # Received when is set to the time the stub is generated! So we # can only test for non-Noneness. self.assertNotEqual(msg.receivedWhen, None) self.assertEqual(msg.sender, u"*****@*****.**") self.assertEqual(msg.senderDisplay, u"*****@*****.**") self.assertEqual(msg.recipient, u"*****@*****.**") self.assertEqual(msg.subject, u"message number %d" % (i,)) self.assertEqual(msg.attachments, i * 2) self.assertEqual(msg.read, i == 2) self.assertEqual(msg.everDeferred, i == 1 or i == 2) if i == 0 or i == 1 or i == 2 or i == 5: _spam = False elif i == 3 or i == 4: _spam = None elif i == 6 or i == 7: _spam = True self.assertEqual(msg._spam, _spam) self.assertEqual(msg.shouldBeClassified, not (i == 3 or i == 4 or i == 7)) self.assertEqual(msg.impl.getHeader(u"subject"), msg.subject) if i == 7: frozenWith = SPAM_STATUS elif i == 5 or i == 6: frozenWith = TRASH_STATUS else: frozenWith = None self.assertEqual(msg._frozenWith, frozenWith)