Problem send email through gmail with an attachment Any help is appreciated
Thanks Alvin """ Does not work """ from twisted.internet.ssl import ClientContextFactory from twisted.internet.defer import Deferred from twisted.mail.smtp import ESMTPSenderFactory from twisted.internet import reactor import smtplib, sys, MimeWriter, mimetypes, mimetools, base64 import StringIO import time import os sender = 'a...@gmail.com' senderpw = 'password' to = 'alvinw...@gmail.org' subject = 'gc' + str(time.time()) text = 'Message Text Body' attachments = ["/home/alvin/Pictures/alvin.jpg", "/home/alvin/Pictures/badlogo.gif"] contextFactory = ClientContextFactory() result = Deferred() message = StringIO.StringIO() writer = MimeWriter.MimeWriter(message) writer.addheader('To', to) writer.addheader('From', sender) writer.addheader('Subject', subject) writer.addheader('MIME-Version', '1.0') writer.startmultipartbody('mixed') part = writer.nextpart() body = part.startbody('text/plain') part.flushheaders() body.write(text) # now add the attachments if attachments is not None: for a in attachments: filename = os.path.basename(a) ctype, encoding = mimetypes.guess_type(a) if ctype is None: ctype = 'application/octet-stream' encoding = 'base64' elif ctype == 'text/plain': encoding = 'quoted-printable' else: encoding = 'base64' part = writer.nextpart() part.addheader('Content-Transfer-Encoding', encoding) body = part.startbody("%s; name=%s" % (ctype, filename)) mimetools.encode(open(a, 'rb'), body, encoding) # that's all falks writer.lastpart() m = message.getvalue() message.close() factory = ESMTPSenderFactory(sender, senderpw, sender, to, m, result, contextFactory=contextFactory) reactor.connectTCP('smtp.gmail.com', 25, factory) result.addCallback(lambda ign: reactor.stop()) reactor.run() /usr/lib/python2.6/dist-packages/twisted/mail/smtp.py:10: DeprecationWarning: the MimeWriter module is deprecated; use the email package instead import MimeWriter, tempfile, rfc822 Traceback (most recent call last): File "/usr/lib/python2.6/dist-packages/twisted/python/log.py", line 84, in callWithLogger return callWithContext({"system": lp}, func, *args, **kw) File "/usr/lib/python2.6/dist-packages/twisted/python/log.py", line 69, in callWithContext return context.call({ILogContext: newCtx}, func, *args, **kw) File "/usr/lib/python2.6/dist-packages/twisted/python/context.py", line 59, in callWithContext return self.currentContext().callWithContext(ctx, func, *args, **kw) File "/usr/lib/python2.6/dist-packages/twisted/python/context.py", line 37, in callWithContext return func(*args,**kw) --- <exception caught here> --- File "/usr/lib/python2.6/dist-packages/twisted/internet/selectreactor.py", line 146, in _doReadOrWrite why = getattr(selectable, method)() File "/usr/lib/python2.6/dist-packages/twisted/internet/tcp.py", line 137, in doRead return Connection.doRead(self) File "/usr/lib/python2.6/dist-packages/twisted/internet/tcp.py", line 460, in doRead return self.protocol.dataReceived(data) File "/usr/lib/python2.6/dist-packages/twisted/protocols/basic.py", line 251, in dataReceived why = self.lineReceived(line) File "/usr/lib/python2.6/dist-packages/twisted/mail/smtp.py", line 1069, in lineReceived why = self._okresponse(self.code,'\n'.join(self.resp)) File "/usr/lib/python2.6/dist-packages/twisted/mail/smtp.py", line 1134, in smtpState_data self.getMailData(), self.transport, self.transformChunk) File "/usr/lib/python2.6/dist-packages/twisted/protocols/basic.py", line 493, in beginFileTransfer self.consumer.registerProducer(self, False) File "/usr/lib/python2.6/dist-packages/twisted/internet/abstract.py", line 313, in registerProducer producer.resumeProducing() File "/usr/lib/python2.6/dist-packages/twisted/protocols/basic.py", line 499, in resumeProducing chunk = self.file.read(self.CHUNK_SIZE) exceptions.AttributeError: 'str' object has no attribute 'read' Unhandled error in Deferred: Traceback (most recent call last): Failure: exceptions.Exception: Consumer asked us to stop producing Traceback (most recent call last): File "postprob.py", line 71, in <module> reactor.run() File "/usr/lib/python2.6/dist-packages/twisted/internet/base.py", line 1170, in run self.mainLoop() File "/usr/lib/python2.6/dist-packages/twisted/internet/base.py", line 1182, in mainLoop self.doIteration(t) File "/usr/lib/python2.6/dist-packages/twisted/internet/selectreactor.py", line 140, in doSelect _logrun(selectable, _drdw, selectable, method, dict) --- <exception caught here> --- File "/usr/lib/python2.6/dist-packages/twisted/python/log.py", line 84, in callWithLogger return callWithContext({"system": lp}, func, *args, **kw) File "/usr/lib/python2.6/dist-packages/twisted/python/log.py", line 69, in callWithContext return context.call({ILogContext: newCtx}, func, *args, **kw) File "/usr/lib/python2.6/dist-packages/twisted/python/context.py", line 59, in callWithContext return self.currentContext().callWithContext(ctx, func, *args, **kw) File "/usr/lib/python2.6/dist-packages/twisted/python/context.py", line 37, in callWithContext return func(*args,**kw) File "/usr/lib/python2.6/dist-packages/twisted/internet/selectreactor.py", line 156, in _doReadOrWrite self._disconnectSelectable(selectable, why, method=="doRead") File "/usr/lib/python2.6/dist-packages/twisted/internet/posixbase.py", line 197, in _disconnectSelectable selectable.connectionLost(failure.Failure(why)) File "/usr/lib/python2.6/dist-packages/twisted/internet/tcp.py", line 678, in connectionLost self.connector.connectionLost(reason) File "/usr/lib/python2.6/dist-packages/twisted/internet/base.py", line 1039, in connectionLost self.factory.clientConnectionLost(self, reason) File "/usr/lib/python2.6/dist-packages/twisted/mail/smtp.py", line 1713, in clientConnectionLost self._processConnectionError(connector, err) File "/usr/lib/python2.6/dist-packages/twisted/mail/smtp.py", line 1721, in _processConnectionError self.file.seek(0, 0) exceptions.AttributeError: 'str' object has no attribute 'seek'
_______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python