示例#1
0
        public async Task <IActionResult> SendSignupEmail([FromBody] dynamic param)
        {
            string link = null;

            AccountToken accountToken = null;

            Exception ex1 = null, ex2 = null;

            try
            {
                accountToken = Helper.JSonCamelDeserializeObject <AccountToken>(param);

                if (accountToken == null || accountToken.ID <= 0 || string.IsNullOrEmpty(accountToken.Value))
                {
                    throw new NullReferenceException();
                }


                await Task.WhenAll(
                    Helper.GetFunc(async() =>
                {
                    string lang = null;

                    try
                    {
                        lang = LanguageManager.DEFAULT_LANGUAGE;

                        link  = Url.Action("xxXxx", "completeregistration", null, this.Request.Scheme);
                        link += (link.EndsWith("/") ? "" : "/") + accountToken.Value;

                        link = link.Replace("/xxXxx/", "/");

                        using (var mailService = this.GetMailService())
                        {
                            await mailService.SendEmailAsync(
                                $"{LanguageManager.GetLabel("AppTitle", lang)} {LanguageManager.GetLabel("lbl_CompleteReg", lang)}",
                                LanguageManager.GetOther("email_SignUp", lang)
                                .Replace("{1}", LanguageManager.GetLabel("AppTitle", lang))
                                .Replace("{2}", link),
                                toEmail: accountToken.AddData,
                                fromName: LanguageManager.GetLabel("AppTitle", lang),
                                replyToEmail: "*****@*****.**",
                                replyToName: "NO REPLY");
                        }
                    }
                    catch (Exception ex)
                    {
                        ex1 = ex;
                    }
                    finally
                    {
                        lang = null;
                    }
                })(),
                    Helper.GetFunc(() =>
                {
                    try
                    {
                        accountToken.RegisterForRecordStateChange();
                        accountToken.EmailSentStatus = EmailSatus.Sending;
                        accountToken.UnregisterForRecordStateChange();

                        accountToken = _dbi.ManageModel(accountToken);
                    }
                    catch (Exception ex)
                    {
                        ex2 = ex;
                    }

                    return(Task.CompletedTask);
                })());


                if (ex1 != null || ex2 != null)
                {
                    accountToken.RegisterForRecordStateChange();
                    accountToken.EmailSentStatus = EmailSatus.SendFail;
                    accountToken.UnregisterForRecordStateChange();

                    accountToken = _dbi.ManageModel(accountToken);


                    if (ex1 != null)
                    {
                        throw ex1;
                    }
                    if (ex2 != null)
                    {
                        throw ex2;
                    }
                }

                accountToken.RegisterForRecordStateChange();
                accountToken.EmailSentStatus = EmailSatus.Sent;
                accountToken.UnregisterForRecordStateChange();

                accountToken = _dbi.ManageModel(accountToken);


                return(Json(accountToken.Simplify()));
            }
            catch (Exception ex)
            {
                return(InternalServerError(ex));
            }
            finally
            {
                link = null;
            }
        }