Наиболее вероятным объяснением получения только подмножества отправляемых вами сообщений является то, что получатель их отбрасывает (проверяли ли вы папку со спамом?). FWIW, если я использую ваш сценарий, все 100 сообщений приходят.
Когда вы отправляете сообщение, вы можете получить отказ от Google или принять его для доставки. Когда Google пытается доставить сообщение, оно может быть отклонено (в этом случае вы должны получить уведомление о статусе доставки от Google) или оно может быть принято. Некоторые почтовые серверы могут сказать, что они принимают сообщение, но не доставляют его (возможно, отбрасывают или отправляют в карантин).
Таким образом, мы возвращаемся к исходной проблеме: почему вы не можете отправить свое сообщение из 200 символов? Давайте посмотрим, что происходит, когда мы пытаемся отправить только это сообщение:
>>> import smtplib
>>> s = smtplib.SMTP("smtp.gmail.com", 587)
>>> s.ehlo()
(250, 'mx.google.com at your service, [60.234.179.13]\nSIZE 35882577\n8BITMIME\nSTARTTLS\nENHANCEDSTATUSCODES')
>>> s.starttls()
(220, '2.0.0 Ready to start TLS')
>>> s.ehlo()
(250, 'mx.google.com at your service, [60.234.179.13]\nSIZE 35882577\n8BITMIME\nAUTH LOGIN PLAIN XOAUTH\nENHANCEDSTATUSCODES')
>>> s.login("username", "password")
(235, '2.7.0 Accepted')
>>> s.mail("sender")
(250, '2.1.0 OK n2sm1693666ybe.6')
>>> s.rcpt("recipient")
(250, '2.1.5 OK n2sm1693666ybe.6')
>>> s.data("Subject: " + ("a" * 200) + "\n\nThis is a test message.")
(250, '2.0.0 OK 1316147451 n2sm1693666ybe.6')
>>> s.quit()
(221, '2.0.0 closing connection n2sm1693666ybe.6')
Это было принято (поэтому проблема не существует), и оно также приходит (некоторые заголовки пропущены):
Received: by 10.223.158.77 with SMTP id e13cs10409fax;
Thu, 15 Sep 2011 21:30:54 -0700 (PDT)
Received: by 10.100.214.1 with SMTP id m1mr1823145ang.134.1316147453266;
Thu, 15 Sep 2011 21:30:53 -0700 (PDT)
Received: from mail-gx0-f178.google.com (mail-gx0-f178.google.com [209.85.161.178])
by mx.google.com with ESMTPS id l19si1913755anm.182.2011.09.15.21.30.51
(version=TLSv1/SSLv3 cipher=OTHER);
Thu, 15 Sep 2011 21:30:52 -0700 (PDT)
Received: by mail-gx0-f178.google.com with SMTP id 21so2167851gxk.23
for <tony.meyer@gmail.com>; Thu, 15 Sep 2011 21:30:51 -0700 (PDT)
Received: by 10.151.43.6 with SMTP id v6mr2088425ybj.402.1316147451688;
Thu, 15 Sep 2011 21:30:51 -0700 (PDT)
Received: from somewhere ([60.234.179.13])
by mx.google.com with ESMTPS id n2sm1693666ybe.6.2011.09.15.21.30.19
(version=TLSv1/SSLv3 cipher=OTHER);
Thu, 15 Sep 2011 21:30:51 -0700 (PDT)
Message-ID: <4e72d0fb.02a5960a.3f71.60b1@mx.google.com>
Date: Thu, 15 Sep 2011 21:30:51 -0700 (PDT)
Sender: Tony Meyer <address>
From: someone
Subject: aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
This is a test message.
Так что потенциально ваш код может сработать, и сообщение придет: проблема связана с адресатом вашего электронного сообщения. К сожалению, если они молча отбрасывают сообщение, то трудно понять, почему они это делают (в отличие от получения DSN, у которого будет причина).
Ваш код содержит раздел для включения вложения. Включается ли это при сбое отправки? Это может быть причиной проблемы. RFC 5322 утверждает, что строки должны быть длиной не более 78 символов (хотя они могут быть длиной до 998) - возможно, пункт назначения вводит более строгое значение? (Предполагая, что ваши 200 символов находятся в одной строке). Если это так, то вы можете закодировать (например, quoted-printable или base64) тело или использовать продолжения, чтобы обернуть объект.