Email Experience Manager(ExM) doesn't send and finish all things related to email immediately.
Your code will put the email into an "automated message bus". And then your email will be sent. After sending of email, other tasks will be executed, e.g. update reporting database with data about the new email. It happens quickly, but not immediately. ...
Facets are represented by the Sitecore.Analytics.Tracker.Current.Contact.Facets dictionary in the tracker and are loaded from xConnect into shared the session state at the start of a session. The default list of facets that are loaded into the session are:
You can't get the contact ID, you can only get the identifier that was used to email the contact. Usually this contact is the Alias, Sitecore.XConnect.Constants.AliasIdentifierSource identifier.
In your layout/rendering, add these two lines.
var source = ExmContext.ContactIdentifier.Source;
var identifier = ExmContext.ContactIdentifier.Identifier;
EXM is sending emails from the CM server and sometimes people don't create proper configs for the CM sites. You need to make sure a CM site resolves to the site /blog/cd/website/home in the config and that you have a mapping for CM to CD url in an item under /sitecore/system/Settings/Email/System/Hostname Mappings node.
Emails are NOT sent from the CD ...
The steps you added here are not complete steps for the upgrade. You need to perform all the steps in the upgrade guide for database upgrades. you can download the upgrade guide
from here - https://dev.sitecore.net/Downloads/Sitecore_Experience_Platform/93/Sitecore_Experience_Platform_93_Initial_Release.aspx
I am adding all the steps in sort here -