Code allowed to test mail invitations by users (from another post) on an instance of Visual studio debugging
Class names shouldn't be plural except for a few exceptions, and BaseViewModels does not seem to be such a case.



Avoid this kind of logic:

if (usr != null)
{
    // lots to do
}
else
{
    // one thing to do
}


Especially here: you could have done

if (usr == null)
{
    model.Feedback.AddError("SendMailInvit User Not find ", " SendMailInvit User Not find =&gt; UserId : " + userId);
    return;
}


and then the rest of the method could be the long list of other instructions.



I've never worked with ASP.NET MVC, so I don't know whether this is the usual way of doing things, but passing a model and then setting properties to give feedback -- e.g. model.Feedback.AddError("SendMailInvit User Not find ", " SendMailInvit User Not find =&gt; UserId : " + userId); -- looks really odd to me.

Especially since this class doesn't have anything to do with the UI; which means you're mixing up tiers.



Don't use regions.



This seems like a hacky solution:

var currentHost = "localhost:57061";
var newhost = $"{GetIPAddressV4()}:90";
url = url.Replace(currentHost, newhost);


Wouldn't it be much simpler to simply have the base URL as a value in a .config file? Especially considering what's happening in GetIPAddressV4().



If I were you I'd move the whole "compile the URL" logic to a separate method.



Avoid abbreviations like UrlInvit, htmlInvit etc. It only makes you code harder to read.