One train passenger was slightly injured in the accident, which occurred around 2 pm, cantonal police said.
A 59-year-old German man drove the truck across the crossing, ignoring the flashing warning lights, and was caught when the barriers descended on either side of the tracks.
The driver was able to escape the vehicle safely just before the train ploughed into the truck, police said.
The force of the collision catapulted the train off the tracks and onto a nearby road, while pushing the truck into an embankment.
The slightly injured passenger did not have to be hospitalized, police said.
Other passengers and the train driver were uninjured.
Damage is estimated in the hundreds of thousands of dollars.
Rail traffic on the line linking Sulgen and Bischofszell was disrupted for most of the day, with bus service providing alternative public transport.
Police said the line should reopen on Tuesday morning.
The road next to the train line was also closed for several hours.
(Photo: Thurgau cantonal police)