Mule ESB uses messages to pass data between different components of an application. A Mule message contains a core payload that holds the primary data to be processed, as well as ancillary attachments. The message also includes immutable inbound properties set by the message source and mutable outbound properties that can be added, removed, or modified by components in the flow.