The primary objective of Emil is to transform messages from one message format to another. It can be described as a batch transformer that takes a message from a file or standard input, transforms the message and writes output to a file or standard output.
Message formats will be described in a configuration file and will not be compiled into the tool. This gives the flexibility to expand the number of formats without having to recompile. A language, resembling the augmented BNF (Backus Naur Form) defined in RFC822 [RFC822] , will be used to describe the formats.
Conversion filters are supplied for character set translation, Base64, BinHex, Quoted-Printable and uuencode. These will be controlled by the message format descriptions described in the configuration files.
The scope of Emil is Internet messages, but Emil is very general and may be used for other messages or files as well. Using Emil for anything else than processing Internet messages will however not be supported, you're wellcome to try it but if you do, you're on your own.
Input is a message conforming to one or several of the message formats in the configuration file. It is not a requirement that messages conform with RFC822 for Emil to be able to convert them. It is a requirement, however, that the available message formats contain the information needed to parse the incoming message. Message formats are an issue of configuration and does not necessarily imply restriction of the potential of the tool.
The generated output is a message conforming to the target message format. In some cases output may be exactly the same as input, i.e. no transformation is conducted. This may be the case when the source and the target formats are identical or when the header line "Content-Conversion: Prohibited" is detected.
Unlike other batch programs, Emil needs to be rather fast and light weight if it is to be used in a production environment, it may not slow down message delivery to any greater extent. The basic assumption here is that memory is cheap and fast while disk I/O is slow. Therefore Emil will not spool messages and data on disk but instead keep them in memory while processing them.
ITS Uppsala university