You should avoid using a piped open to sendmail.
As a matter of interest why? Using the mail injection capabilities of sendmail (or other MTA - most provide a similar interface) is reliable and simple: the MTA will perform all the queuing, error recovery and MX lookup for you whereas with (e.g) Net::SMTP you have to do all of these things for yourself plus you are subject to the exigencies of the networks condition, if a local MTA cannot send a message because the MX host is unreachable then it will try again until it can send it (or the retry times out), if you don't provide this functionality yourself with one of the modules then the message at best won't get sent.
Of course I'm not suggesting that one shouldn't use the modules either, just taking issue with the assertion that they are in all cases superior than using the MTA directly.
This has been done to death over the years and I am sure you can find plenty of arguments and counter arguments in the archives of CLPM.