The change in voting procedures was proposed by deputies from the ruling conservative Law and Justice party.
But opposition politicians argue that even a postal ballot would cause coronavirus infections to spread, and that normal election campaigning has been made impossible by the epidemic.
A total of 230 deputies voted in favour of the change on Monday evening, while 226 were against and two abstained. The bill now goes to the Senate, the upper house, for debate.
Opposition politicians have been calling for the presidential election to be postponed.
But members of Law and Justice have accused the opposition of playing for time in the hope that the gap will narrow between incumbent conservative President Andrzej Duda, who is bidding for a second term, and his rivals.
Opposition presidential candidates are way behind Duda in the polls, recent surveys have shown.
Borys Budka, head of the opposition Civic Platform party, claimed last week that Law and Justice leader Jarosław Kaczyński wanted to “expose all those postmen, members of electoral commissions, to risk [of coronavirus infection] because he is terribly afraid of losing power.”
Deputy Prime Minister Jarosław Gowin on Monday offered to resign amid a dispute over whether Poland should hold a presidential election during an epidemic.
Gowin told reporters that the ballot should be postponed, while the authorities should focus on “battling the coronavirus epidemic and fighting for the Polish economy.”
Gowin said, however, that the conservative Agreement group of which he is leader would remain part of Poland’s governing right-wing coalition headed by Law and Justice.
A total of 4,413 people have tested positive for the COVID-19 disease in Poland, with 107 deaths from the coronavirus so far, officials said on Monday afternoon.