At 10:43 PM 8/10/01 +0200, Dieter Maurer wrote:
Good, but isn't it difficult to make mail sending transactional:
The sending may raise exceptions.
Zope is very angry to get exceptions during the second phase of the two-phase commit.
This means, sending must go into the first phase. But in this case, they are sent even if a different transaction manager rejects the "commit" request (or raises an exception).
The way Ty and I handle this in our applications is to not use the sendmail tag, but instead write a file to a queue directory, where it is then sent by another process which monitors the queue. This is easier to make transactional, since the commit operation only has to move the file to commit it. Unfortunately, this is not a general solution for Zope, since it then requires the existence of that other process. But in theory one could create a Product that would implement a daemonic thread for sending queued mail in this fashion.