You can't create variable names at run-time - they are all used by the compiler so even if you could, you couldn't access them in your code!
Have you considered a List or an array?
int messagesNeeded= dtNewSMtp.Rows.Count;
List<MailMessage> messages = new List<MailMessage>(messagesNeeded);
for (int i = 0; i < messagesNeeded; i++)
{
MailMessage msg = new MailMessage();
messages.Add(msg);
...
}
You can then address each message individually via the index as necessary