package mireka.transmission;
/**
* A reliable (as specified by SMTP) mail transmitting service. If it accepts
* the mail, i.e. it doesn't throw an exception immediately, then it also
* accepts the responsibility to deliver the mail. If necessary it periodically
* retries. If it gives up, then it creates and sends a Delivery Status
* Notification message to the sender.
*/
public interface Transmitter {
/**
* Sends mail asynchronously. It returns immediately. If necessary it queues
* the mail and retries periodically.
*
* @throws LocalMailSystemException
* if it cannot accept the mail, e.g. because the disk is full.
*/
void transmit(Mail mail) throws LocalMailSystemException;
}