The vote on the "Marriage for All" bill took place after months of often acrimonious debate and street protests that sometimes turned violent, the broadcaster France 24 reported. House Speaker Claude Bartolome received an envelope this week containing gunpowder and a threatening letter telling him to postpone the vote, investigators say.
The bill, which had already passed the Assembly in February, received a 331-225 vote on second reading, necessary because the law was amended in the Senate.
If President Francois Hollande signs the bill as expected, France will the ninth European country to allow same-sex marriage. Same-sex couples can also marry in Argentina, Canada, New Zealand, South Africa, some states in Brazil and Mexico and nine U.S. states and the District of Columbia.
Recent polls have showed support for gay marriage at around 55 percent. But opposition to gay adoptions has increased, with 56 percent now against it.
Opponents of the bill planned to hold another rally Tuesday evening to convince Hollande, who promised during the campaign to legalize gay marriage and adoption, not to sign it.