This message is not intended to reopen this thread, I am just confirming that neilโs solution worked for me. Without the domain verification I was not able to send messages.
In my case, I hosted my app as a static site, on a live domain (rather than localhost) so I had access to edit the DNS records for my domain name.
I created three CNAME records and copy/pasted the details that SendGrid provide on the authentication page. I then generated a new API and replaced the old one.
I found using the cloud function to send the verification email was not working, so after signing up the user in the front-end code, I called a new function
sendEmailVerification = async () => {
let user = Moralis.User.current();
let userEmail = user.attributes.email;
await Moralis.User.requestEmailVerification(userEmail)
.then(() => {
//user will get an email with a link. If the user clicks on the link his user get authenticated.
console.log("Successfully sent email verification email");
})
.catch((error) => {
// Show the error message somewhere
alert("Error: " + error.code + " " + error.message);
});
};