Chris Brown of the Bills' official website confirmed the news.
Powell, 25, made 14 receptions for 142 yards in 2016. He has been with the Bills since midway through the 2015 season.
"I was disappointed to recently find out that I had mistakenly used a product that caused a positive result during drug testing," Powell said in a statement, per Bills sideline reporter Sal Capaccio. "Although I'm frustrated with the result, I've accepted the league's discipline of a four game suspension. I apologize to my teammates, coaches, the entire Bills organization and the Bills fans for my mistake. I will continue to give the Bills my best effort every day, and help contribute to a successful 2017 season."
Powell will remain eligible to practice with the team and play in preseason games until his suspension begins before Week 1 of the regular season. Used almost entirely on special teams early in his career, Powell got some time with the offense in 2016 and seemingly had a chance to move his way up a shaky Bills depth chart at receiver.
It's unclear how this will affect Powell's standing with the team. His relative lack of NFL production could wind up putting him on the cut line if he's outperformed in camp, with the Bills currently boasting 12 receivers on their roster.