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

Fabio Sangiovanni sangiovanni at nweb.it
Wed Nov 6 07:32:31 MST 2013


Il 06/11/13 15:20, exarkun at twistedmatrix.com ha scritto:
> 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
Thanks Jean-Paul,
I'll go the way suggested by Stacey, then.
Any other suggestions about my approach?

Thanks again!
>> 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
>>
>
> _______________________________________________
> 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