KYIV, Ukraine—Russia launched another mass drone-and-missile attack against Ukraine, the latest in a growing campaign to break Ukrainian morale and wear down its air-defense systems.

The barrage of 99 missiles early Tuesday morning was the second significant salvo in less than a week, after one of the largest missile attacks of the war on Friday. The heavy bombardments are putting pressure on Ukraine’s stocks of air-defense missiles, which it receives primarily from the West.

Ukraine’s air force said 72 of the 99 missiles were shot down, mostly over Kyiv, as were all 35 Iranian-designed Shahed drones. At least four people were killed and more than 90 injured.

Ukrainian President Volodymyr Zelensky, who has been calling ever louder for more military aid, acknowledged his country’s dependence on the Western air-defense systems on Tuesday.

“I thank all partners who help in strengthening our air shield,” he said. “It’s obvious that it helps save hundreds of lives every day and every night that would have been taken by Russian terror if it weren’t for Patriots and other defense systems,” he added, referring to the U.S.-made missile system.

Zelensky said that the majority of the missiles were aimed at civilian sites. The Russian Defense Ministry said it had targeted drone factories, not civilian infrastructure. It also said that a Ukrainian attack on the border region of Belgorod over the weekend had killed 22 people, and that over the previous 24 hours it had shot down 11 Ukrainian missiles.

The recent attacks come at a vulnerable moment for Ukraine, with U.S. and European Union aid packages stalled.

Russia fired 10 Kinzhal ballistic missiles on Tuesday and all were shot down, according to Ukraine’s air force. In Ukraine, only the Patriot systems can shoot down such high-speed missiles. In December, Japan said it would provide Patriot missiles to the U.S. to replenish stocks.

Russia continues to produce missiles despite predictions they would run out. Ukraine’s military-intelligence agency estimates that Russia can each month produce about 100 of two different types of cruise missiles, four Kinzhal ultrafast ballistic missiles and five ballistic missiles.

Zelensky is trying to keep up morale amid the onslaught. Already, his approval ratings had fallen after last summer’s counteroffensive failed to make significant gains.

In addition, the government is preparing to call up as many as 500,000 more people into the military. In Kyiv and other cities, men are being pulled off the street and taken to recruiting offices, leading some to stay inside all day.

Damage was substantial around Kyiv on Tuesday for the second time in less than a week. The mayor, Vitali Klitschko, said one of the missiles set fire to a high-rise building, killing one person and hospitalizing 37 others.

“Morale is heavier than a year ago,” said Oksana Dotsenko, 47, who lives nearby and was woken by the missile strike on Tuesday. “I don’t believe in miracles much anymore. Now it’s obvious to me that this war will last a long time.”

Still, residents said the strikes were designed to hit their morale and, if anything, underscored that they couldn’t negotiate with Moscow.

“Of course we are tired of the war and the shelling,” said Anastasia Klimenko, 39. “But what can we do but fight? Negotiate with the Russians? If we give in to their terms because we’re tired, it’ll be the greatest mistake in the history of our country.”

—Ann M. Simmons contributed to this article.

Write to Ian Lovett at ian.lovett@wsj.com