private static void _sendEmail(AsyncSendMailStatus status, MailTask mailTask)
        {
            try
            {
                var server = mailTask.BuildServer();
                var mail   = mailTask.BuildMail();
                var smtp   = new SmtpClient();

                // Add event handlers to current SmtpClient instance.
                smtp.OnAuthorized        += new SmtpClient.OnAuthorizedEventHandler(OnAuthorized);
                smtp.OnConnected         += new SmtpClient.OnConnectedEventHandler(OnConnected);
                smtp.OnSecuring          += new SmtpClient.OnSecuringEventHandler(OnSecuring);
                smtp.OnSendingDataStream +=
                    new SmtpClient.OnSendingDataStreamEventHandler(OnSendingDataStream);

                status.Status = "Connecting server ...";
                smtp.Tag      = status;
                smtp.SendMail(server, mail);

                status.Status   = "Completed";
                status.HasError = false;
                status.Progress = 100;
            }
            catch (Exception ep)
            {
                status.Status   = ep.Message;
                status.HasError = true;
                status.Progress = 100;
            }

            status.Completed = true;
        }
Пример #2
0
        private ActionResult _syncSendMail(MailTask mailTask)
        {
            var OauthWrapper = _initOauthWrapper(mailTask.OauthProvider);

            ViewBag.TokenIsExisted = !string.IsNullOrEmpty(OauthWrapper.Provider.AccessToken);

            try
            {
                mailTask.AuthType = SmtpAuthType.XOAUTH2;
                mailTask.User     = OauthWrapper.Provider.UserEmail;
                mailTask.Password = OauthWrapper.Provider.AccessToken;
                mailTask.IsAuthenticationRequired = true;

                // always set From to authenticated user.
                mailTask.Sender = OauthWrapper.Provider.UserEmail;

                var smtp   = new SmtpClient();
                var server = mailTask.BuildServer();
                var mail   = mailTask.BuildMail();

                smtp.SendMail(server, mail);

                ViewBag.IsSyncSendSucceeded = true;
                ViewBag.SyncSendStatus      = "Message has been submitted to server successfully.";
            }
            catch (Exception ep)
            {
                ViewBag.IsSyncSendSucceeded = false;
                ViewBag.SyncSendStatus      = ep.Message;
            }

            mailTask.TaskId = Guid.NewGuid().ToString();
            return(_mailView(mailTask));
        }
        void _syncSendMail(MailTask mailTask)
        {
            try
            {
                var smtp   = new SmtpClient();
                var server = mailTask.BuildServer();
                var mail   = mailTask.BuildMail();

                smtp.SendMail(server, mail);
                ViewBag.IsSyncSendSucceeded = true;
                ViewBag.SyncSendStatus      = "Message has been submitted to server successfully.";
            }
            catch (Exception ep)
            {
                ViewBag.IsSyncSendSucceeded = false;
                ViewBag.SyncSendStatus      = ep.Message;
            }
        }
        bool _submitMessage(int recipientIndex, MailTask mailTask)
        {
            if (!_trafficController.PrepareIncreaseConnection())
            {
                _trafficController.Rollback();
                return(false);
            }

            if (!_trafficController.PrepareIncreaseMessage())
            {
                _trafficController.Rollback();
                return(false);
            }

            SendMailThreadState state = new SendMailThreadState();

            state.Server = mailTask.BuildServer();
            state.Mail   = mailTask.BuildMail();

            state.Mail.TextBody = state.Mail.TextBody.Replace("[$sender]", state.Mail.From.ToString());
            state.Mail.TextBody = state.Mail.TextBody.Replace("[$rcpt]", state.Mail.To.ToString());
            state.Mail.TextBody = state.Mail.TextBody.Replace("[$subject]", state.Mail.Subject.ToString());

            // even you can add different attachment for different recipient here.
            state.RecipientIndex = recipientIndex;

            try
            {
                Interlocked.Increment(ref _threadCounter);
                ThreadPool.QueueUserWorkItem(this._sendThreadProc, state);
                _trafficController.Commit();

                return(true);
            }
            catch
            {
                Interlocked.Decrement(ref _threadCounter);
                _trafficController.Rollback();
                return(false);
            }
        }