Итак, у меня есть приложение MVC, в котором я пытаюсь отправить электронное письмо из формы Angular, запущенной на сервере DotNet. Основная проблема, которую я вижу, заключается в том, что когда я вызываю службу из моего компонента Angular, она возвращает 404 (возможно, URL-адрес не найден).

Теперь у меня есть сообщение в моем контроллере, которое должно быть напечатано, но это не означает, что мой Angular не может общаться с моим внутренним контроллером.

Вот моя функция отправки Send-Email.component.ts

submit() {
    if (this.EmailForm.valid) {
      this.eServ.sendEmail(this.EmailForm.getRawValue()).subscribe(result => {
        console.log("Email sent!");
      });
      this.ref.close(this.EmailForm.getRawValue())
    }
}

Это мой адрес электронной почты.

export class EmailService {

  constructor(private http: HttpClient) { }

  headers = new HttpHeaders().set('Content-Type', 'application/json; charset=utf-8');

  sendEmail(mailMessage: any) {
    return this.http.post('api/mail/sendmail', JSON.stringify(mailMessage), { headers: this.headers })
  }

}

Наконец, вот мой контроллер:

[Route("api/mail/sendmail")]
    [ApiController]
    public class EmailController : ControllerBase
    {
        [HttpPost]
        public async Task<IActionResult> SendMail([FromBody] Email email)
        {
            Console.WriteLine("Sending email");
            var client = new System.Net.Mail.SmtpClient("smtp.example.com", 111);
            client.UseDefaultCredentials = false;
            client.EnableSsl = true;
            client.Credentials = new System.Net.NetworkCredential(emailid, password);
            var mailMessage = new System.Net.Mail.MailMessage();
            mailMessage.From = new System.Net.Mail.MailAddress(senderemail);
            mailMessage.To.Add(email.To);
            mailMessage.Body = email.Text;
            await client.SendMailAsync(mailMessage);
            return Ok();
        }
    }
}

Теперь я не могу понять, почему он не может разговаривать с контроллером. Что-то мне не хватает?

TIA !!

0
Sir Richard Jr 22 Ноя 2020 в 08:30

2 ответа

Лучший ответ

Похоже, службе нужно отправить объект электронной почты, а не «любой». В компоненте используйте Object.Assign для создания нового объекта Email.

Email.service

sendEmail(mailMessage: Email) {
    return this.http.post<Email>('api/email/sendmail', JSON.stringify(mailMessage), { headers: this.headers })
  }

Отправить-Email.Component

submit() {
    if (this.EmailForm.valid) {
   let dataToSend: Email = Object.assign(new Email(), this.EmailForm.getRawValue())// add this
// then the rest of the code
    }
}

Контроллер выглядит нормально. Сообщите мне, если это сработает.

--Обновить--

В вашем контроллере маршрут должен быть:

[Route("api/email/sendmail")]

Потому что имя вашего контроллера - Электронная почта, а не почта.

0
Harshit Arora 22 Ноя 2020 в 23:54

У вас нет доменной части URL-адреса в вашем вызове API.

sendEmail(mailMessage: any) {
    return this.http.post('https://example.com/api/mail/sendmail', 
    JSON.stringify(mailMessage), { headers: this.headers })
  }
0
Malith 22 Ноя 2020 в 17:23
64950962