Need to figure out the framework for how the UI interacts with the SMTP service
How does the UI indicate to the SMTP service that one or more email items are ready to send
How does the service feed email status back up to the UI
Possibility:
The UI creates email items
While being edited, those email items have their status set to "Draft"
When the user clicks Send, the UI changes the status of an email to "Ready", and calls an SMTP service method, passing the item to send
The SMTP service does any pre-flight checks and can return an error condition from the method immediately (setting the status back to "Draft")
If the email item looks ok, the SMTP service asynchronously attempts to send the message (setting the status to "Sent")
If an error such as "no such user" occurs, the SMTP service sets the email item's status to "Error" (and somehow alerts the app -- through notifications?)
I think there are 3 classes of errors:
Submit-time errors (malformed address, for example) determined by the SMTP layer itself, reported synchronously, as an exception raised from the "send message" method
SMTP-Connection-time errors (no such user, no such domain, others?), determined relatively quickly, reported to app asynchronously
Later-occurring errors (tried to send for 3 days and giving up, for example), determined up to days later, reported to app asynchronously
Can we do anything special with bounces? Can we determine which sent item it corresponds to?
Meet on Thursday to go over user experience requirements
Look into doctests as a way to augment our external unit tests, especially as a way to provide better documentation
Talking again with Jeffrey about the state of the generated schema documentation; I suggested a couple possibilities:
I write a little bit of code which generates an XML file based on all the schema items in the repository, and Jeffrey transforms that
That little bit of code produces a set of HTML files directly
Looking at Donn/John's renderer/editor notes; think about how that could be applied to the sharing preferences dialog