Как использовать функцию почтовой рассылки asp.net для других функций [Отображается ошибка] - PullRequest
0 голосов
/ 01 апреля 2019

Я работаю над проектом на форуме, где пользователи могут отправлять сообщения.Проект выполнен на веб-форме ASP.Net с использованием Identity.

В классе IdentityConfig.cs код, отвечающий за создание структуры электронной почты, выглядит следующим образом:

public class EmailService : IIdentityMessageService
    {
        public Task SendAsync(IdentityMessage message)
        {
            // Plug in your email service here to send an email.
            //return Task.FromResult(0);
            return Task.Factory.StartNew(() =>
            {
                sendMail(message);
            });
        }

        void sendMail(IdentityMessage message)
        {
            #region formatter
            string text = string.Format("Please click on this link to {0}: {1}", message.Subject, message.Body);
            string html = "Please confirm your account by clicking this link: <a href=\"" + message.Body + "\">link</a><br/>";

            html += HttpUtility.HtmlEncode(@"Or click on the copy the following link on the browser:" + message.Body);
            #endregion

            MailMessage msg = new MailMessage();
            msg.From = new MailAddress(ConfigurationManager.AppSettings["Email"].ToString());
            msg.To.Add(new MailAddress(message.Destination));
            msg.Subject = message.Subject;
            msg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(text, null, MediaTypeNames.Text.Plain));
            msg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html));

            SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", Convert.ToInt32(587));
            System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["Email"].ToString(), ConfigurationManager.AppSettings["Password"].ToString());
            smtpClient.Credentials = credentials;
            smtpClient.EnableSsl = true;
            smtpClient.Send(msg);
        }

Когда пользователь регистрируется, этот код используется для отправки электронной почты какследует

string code = manager.GenerateEmailConfirmationToken(user.Id);
                string callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request);
                manager.SendEmail(user.Id, "Confirm your account", "Please confirm your account by clicking <a href=\"" + callbackUrl + "\">here</a>.");

Я попытался воссоздать следующий код, чтобы иметь возможность отправить электронное письмо для других функций, связанных с проектом.Сначала я попытался создать второй «пустой почтовый ящик», который выглядит так:

public void sendCoordinatorMail(IdentityMessage message)
        {
            #region formatter
            string text = string.Format("A user of your department has submitted a post.");
            string html = "";

            html += HttpUtility.HtmlEncode(@"" + message.Body);
            #endregion

            MailMessage msg = new MailMessage();
            msg.From = new MailAddress(ConfigurationManager.AppSettings["Email"].ToString());
            msg.To.Add(new MailAddress(message.Destination));
            msg.Subject = message.Subject;
            msg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(text, null, MediaTypeNames.Text.Plain));
            msg.AlternateViews.Add(AlternateView.CreateAlternateViewFromString(html, null, MediaTypeNames.Text.Html));

            SmtpClient smtpClient = new SmtpClient("smtp.gmail.com", Convert.ToInt32(587));
            System.Net.NetworkCredential credentials = new System.Net.NetworkCredential(ConfigurationManager.AppSettings["Email"].ToString(), ConfigurationManager.AppSettings["Password"].ToString());
            smtpClient.Credentials = credentials;
            smtpClient.EnableSsl = true;
            smtpClient.Send(msg);

Приведенный выше код необходим для создания электронного письма, которое отправляется администратору форума всякий раз, когда пользователь создает и отправляет сообщение., там я добавил следующий код после кода "Post newPost = new Post ()", который выглядит следующим образом

manager.sendCoordinatorMail(user.Id, "A user of your department has submitted a post.", "");

Кажется, я получаю сообщение об ошибке "sendCoordinatorMail", которое говорит

'ApplicationUserManager' does not contain a definition for 'sendCoordinatorMail' and no accessible extension method 'sendCoordinatorMail' accepting a first argument of type 'ApplicationUserManager' could be found.

Я прошу прощения за очень длинный вопрос, но есть ли что-то, что я явно делаю неправильно?

1 Ответ

0 голосов
/ 01 апреля 2019

Что я вижу:

Ваш менеджер относится к типу ApplicationUserManager, а ваши методы, относящиеся к электронной почте, относятся к классу EmailService. Вы пытаетесь вызвать метод sendCoordinatorMail через ApplicationUserManager, но я предполагаю, что в менеджере такого метода нет.

PS: Попробуйте настроить в диспетчере функцию, которая будет вызывать sendCoordinatorMail.

...