All those killed had been on the truck which was sliced in two, said Johan Minnie, Cape Town emergency services spokesman.
Nineteen others were injured and taken to hospitals near the site of the accident at the town of Faure, about 40km southeast of Cape Town.
Three of the injured had been passengers on the train. The driver was being treated for shock.
The truck was on a level crossing when it was hit by the train about 7am (0500 GMT) on Monday, said Minnie.
A police spokesman told the SAPA news agency that the truck’s driver suffered minor injuries.
“There don’t seem to be any barriers at this level crossing,” he said.
An official for the wine farm where the workers were employed on contract, said: “This is a terrible day. It is a great disaster. They were just innocently coming to work.”
The crash is one of the worst in South Africa in recent years.
Nine people died and 59 were injured in April last year after a bus rammed into a freight train in the northern Limpopo province.