diff -r 2072deff3b2f Lib/email/message.py --- a/Lib/email/message.py Mon Feb 24 14:31:25 2014 -0800 +++ b/Lib/email/message.py Mon Mar 03 00:49:48 2014 +0530 @@ -203,7 +203,10 @@ if self._payload is None: self._payload = [payload] else: - self._payload.append(payload) + try: + self._payload.append(payload) + except AttributeError: + raise TypeError("Attach not valid on a message with a non-multipart payload") def get_payload(self, i=None, decode=False): """Return a reference to the payload. diff -r 2072deff3b2f Lib/test/test_email/test_email.py --- a/Lib/test/test_email/test_email.py Mon Feb 24 14:31:25 2014 -0800 +++ b/Lib/test/test_email/test_email.py Mon Mar 03 00:49:48 2014 +0530 @@ -124,6 +124,13 @@ msg.set_payload([]) self.assertEqual(msg.get_payload(), []) + def test_email_attach_to_string(self): + msg = Message() + msg['Content-Type'] = 'multipart/mixed' + msg.set_payload('string payload') + sub_msg = MIMEMessage(Message()) + self.assertRaisesRegexp(TypeError,"Attach not valid on a message with a non-multipart payload",msg.attach,sub_msg) + def test_get_charsets(self): eq = self.assertEqual