I also had this problem and went through a deep analysis.
The issue stems from the fact that Bluehost requires that the email be sent from an account that exists on the system. They do this as an anti-spam technique and they require this even if the mail is originating from within the system.
Enter WordPress. PHP uses a mail function mail(). WordPress maps this to wp_mail() and pretty much everyone uses the wp_mail for the plugins within WordPress. This makes sense as it allows customization of WordPress mail at a relatively low cost of performance.
Enter Buddypress. Buddypress places a filter upon wp_mail() such that all email originate from the user ‘noreply’ on the domain such that end users don’t reply to the notifications. Sounds cool.
But remember that Bluehost does not allow email to be sent from non-accounts and that’s the catch.
Using a foreign SMTP does not work for Bluehost blocks those ports. Using local SMTP will work but you need to provide the right setup and credentials. Finally, using mail-from plugin works since it filter’s the Buddyhost filter changing the email from address back to a valid Bluehost email account.
Hopefully, this explains what is happening and you can choose which strategy you want to use to fix the problem.