It was Sri Lanka's 11th overall lost to Zimbabwe in 56 ODIs with them.
Batting first, Zimbabwe totalled 290 for 6 in their allotted 50 overs.
However, in reply Sri Lanka could muster only 278 runs in 48.1 overs.
Thisara Perera struck 64 runs off 37 balls with five fours and three sixes, giving some hope to the Lankans.
Kusal Janith also made 80.
This win was Zimbabwe's first victory against a Full Member at a neutral venue in 15 years.