A virus requires a carrier file to spread across a network and replicates by inserting copies into other files. A trojan is defined as an attack that doesnt self-replicate.
A worm can self-replicate without a carrier file. Spam can be used to disguise an attack, but is not in of itself an attack.