Setting the POST body for http outbound is trivial in Mule. Whatever is the current payload, will be sent as the POST body. Try this example to see how http POST, headers, and http response work in Mule:
<flow name="testFlow1">
<http:inbound-endpoint exchange-pattern="request-response" host="0.0.0.0" port="8080" path="path1"/>
<set-payload value="my post data"/>
<http:outbound-endpoint exchange-pattern="request-response" host="0.0.0.0" port="8080" path="path2" method="POST">
<set-property propertyName="SOAPAction" value="http://tempuri.org/getCurrencies" />
</http:outbound-endpoint>
<object-to-string-transformer/>
<logger message="reply from post:#[payload]" level="INFO"/>
</flow>
<flow name="testFlow2">
<http:inbound-endpoint exchange-pattern="request-response" host="0.0.0.0" port="8080" path="path2"/>
<object-to-string-transformer/>
<logger message="post data:#[payload]" level="INFO"/>
<logger message="my header:#[message.inboundProperties['SOAPAction']]" level="INFO"/>
<set-payload value="my reply"/>
</flow>