I am reading about Ethereum and I am a little confused with the terms EVM code, message, and contract account. Is EVM code and smart contract the same?
EVM Code is the binary code of Ethereum smart contracts, the code which can be executed by the Ethereum Virtual Machine.
Usually smart contracts are written in Solidity but the machine which executes a contract does not understand Solidity so the code must be translated to something which can be understood on the Ethereum network. This is the job of the compiler: to translate from a human-readable language, Solidity, to a machine-readable language EVM Code.
If you write programs in for example C++, you also need a compiler to transform C++ code into binary code which your processor understands. For most computers the binary code is called X86; for the Ethereum Virtual Machine which executes code on the blockchain, it is called EVM Code.