[Twisted-Python] (newbie!) smtp to message object

exarkun at twistedmatrix.com exarkun at twistedmatrix.com
Wed Nov 6 07:20:32 MST 2013


On 11:35 am, sangiovanni at nweb.it wrote:
>Il 06/11/13 12:09, Stacey Sern ha scritto:
>>Hi,
>>
>>I also tried to figure out how to deliver one copy of a message 
>>instead of one for every recipient for a Twisted server tutorial 
>>(ticket #3324) which hasn't yet been finalized.  Here's the way I went 
>>about it but I'd appreciate comments on the approach as well.
>>
>>For the IMessageDelivery.validateTo method, it generates the real 
>>IMessage object when it receives the first recipient.  After that, it 
>>returns a NullMessage object for each subsequent recipient.  The 
>>NullMessage object is called for each line received as part of the 
>>message but does nothing with it.  Then you don't need to change 
>>_cbToValidate.  Here's you're code with the modifications 
>>http://pastebin.com/6nFXiTgK.
>>
>>Stacey
>Hi Stacey,
>thanks for your reply.
>
>I think your approach is cleaner than mine! Thanks!
>My only concern is this loop in smtp.SMTP.do_DATA:
>
>for (user, msgFunc) in recipients:
>[...]
>
>that implies a scan of the whole list of messages (made of the 'real' 
>message and of the other NullMessages).
>I don't know how it can really impact on performances, though. I aimed 
>at not creating 'fake' messages at all, but it's not clear to me if 
>it's even possible without overriding _cbToValidate.

The performance impact of this is going to be minimal.

On a runtime like PyPy, the impact *may* even be zero.

Jean-Paul
>Let's keep in touch!
>
>Fabio
>>
>>
>>
>>On Nov 6, 2013, at 5:08 AM, Fabio Sangiovanni <sangiovanni at nweb.it 
>><mailto:sangiovanni at nweb.it>> wrote:
>>>Hello list,
>>>
>>>I'm new to twisted and to python in general, so still deep in the 
>>>learning process.
>>>Please forgive any faulty assumptions you'll find in this post :)
>>>
>>>I'm trying to accomplish to the following task: realize a tool that 
>>>acts as a proxy between the SMTP domain and the 'objects' domain. 
>>>That is: a daemon that listens for SMTP connections (relayed sessions 
>>>from Postfix) and bundles everything that belongs to a single session 
>>>(envelope sender, envelope recipients, headers, body) into an object 
>>>(it will probably become a JSON one day, not decided yet). The aim is 
>>>to allow further processing (es. publishing to a queue) of a self- 
>>>contained item.
>>>
>>>My (draft) implementation can be reached at 
>>>http://pastebin.com/mbRztuid
>>>
>>>My main concerns are:
>>>1) am I using the right classes? My implementation leverages 
>>>twisted.mail.smtp, is this correct?
>>>2) I've overridden smtp.SMTP._cbToValidate; I really don't like this 
>>>very much (I'd like to leave the protocol untouched) but it's the 
>>>only way I've come up with (after several days of experiments :) ) to 
>>>have one single payload down the line (in smtp.SMTP.do_DATA), and not 
>>>one copy of the message for every single recipient. May this have bad 
>>>consequences?
>>>3) what do you think about the overall approach? could it have been 
>>>done differently/better?
>>>
>>>Thanks a lot for your help!
>>>
>>>Fabio
>>>_______________________________________________
>>>Twisted-Python mailing list
>>>Twisted-Python at twistedmatrix.com <mailto:Twisted- 
>>>Python at twistedmatrix.com>
>>>http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>>
>>
>>
>>_______________________________________________
>>Twisted-Python mailing list
>>Twisted-Python at twistedmatrix.com
>>http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python
>



More information about the Twisted-Python mailing list