Smoke testing is done to test the health of a software build. It is a test that gets performed before moving onto carrying out a more intensive testing ie. for the initial stage of the build. Smoke testing is done by both developers and testers.
Sanity testing is done to verify that the affected functionality still work as expected. It is usually done after a fix in a particular module/functionality by testers after many regression tests.