/// <summary>
        ///     Final method for sending emails to the user.
        /// </summary>
        /// <param name="mailWrapper">MailSendingWrapper which will contain a server object and a mail message</param>
        /// <param name="async"></param>
        /// <param name="userToken"></param>
        /// <param name="sendCompletedEventHandler"></param>
        /// <param name="disposeMailWrapper">At the end dispose mail wrapper to free the memory and any blocking of files.</param>
        /// <returns></returns>
        public void SendMail(
            MailSendingWrapper mailWrapper,
            bool async       = true,
            object userToken = null,
            SendCompletedEventHandler sendCompletedEventHandler = null,
            bool disposeMailWrapper = true)
        {
            var server  = mailWrapper.MailServer;
            var message = mailWrapper.MailMessage;

            if (server != null && message != null)
            {
                if (async)
                {
                    //userToken = userToken ?? "None";
                    new Thread(() => {
                        server.Send(message);
                        //if (disposeMailWrapper) {
                        //    Dispose(mailWrapper);
                        //}
                    }).Start();
                }
                else
                {
                    server.Send(message);
                    //if (disposeMailWrapper) {
                    //    Dispose(mailWrapper);
                    //}
                }
            }
        }
 /// <summary>
 ///     Dispose wrapper object.
 /// </summary>
 /// <param name="wrapper"></param>
 public void Dispose(MailSendingWrapper wrapper)
 {
     wrapper.MailServer.Dispose();
     wrapper.MailMessage.Dispose();
     wrapper.MailMessage = null;
     wrapper.MailServer  = null;
     wrapper             = null;
     GC.Collect();
 }