【问题标题】:How to send contact form-data to API using mailkit (Angular 7 + .Net core web api)如何使用mailkit(Angular 7 + .Net core web api)将联系表单数据发送到API
【发布时间】:2019-10-19 18:59:35
【问题描述】:

我正在尝试使用 mailkit 将联系表单数据提交到 api 端点。我有一个带有联系页面的网站,每当有人填写联系表格并点击发送时,我希望我的网站向我发送一封电子邮件。可悲的是,我一直在努力解决这个问题好几个星期(编程新手),我想我会寻求帮助。

我已经检查了无数次 youtube,但似乎在任何地方都找不到完整的教程,说明如何使用 .NET web api、mailkit 和 angular 7 来做到这一点。

我将从我的表单 html 开始(带有验证的非常标准的反应式表单):

  <form novalidate [formGroup]="contactForm" method="post" (ngSubmit)="onSubmit(contactForm, contactForm.isValid)">
      <div class="form-group">
        <label>Name</label>
        <input  type="text" formControlName="name" class="form-control" placeholder="Enter name">
        <div [hidden]= "contactForm.controls.name.valid || contactForm.controls.name.pristine" class="alert alert-danger">
          <span *ngIf="!contactForm.controls.name.valid"> Name is required!</span>
        </div>
      </div>
      <div class="form-group">
        <label>Email</label>
        <input  type="text" formControlName="email" class="form-control" placeholder="Enter email">
        <div [hidden]= "contactForm.controls.email.valid || contactForm.controls.email.pristine" class="alert alert-danger">
          <span *ngIf="!contactForm.controls.email.valid"> Email is required!</span>
        </div>
      </div>
      <div class="form-group">
        <label>Subject</label>
        <input  type="text" formControlName="subject" class="form-control" placeholder="Enter subject">
        <div [hidden]= "contactForm.controls.subject.valid || contactForm.controls.subject.pristine" class="alert alert-danger">
          <span *ngIf="!contactForm.controls.subject.valid"> Subject is required!</span>
        </div>
      </div>
      <div class="form-group">
        <label>Message</label>
        <textarea rows="3" type="text" formControlName="message" class="form-control" placeholder="Enter message"></textarea>
        <div [hidden]= "contactForm.controls.message.valid || contactForm.controls.message.pristine" class="alert alert-danger">
          <span *ngIf="!contactForm.controls.message.valid"> Message is required!</span>
        </div>
      </div>


      <br>
      <button type="submit" [disabled]="!contactForm.valid" class="btn btn-primary">Submit</button>


    </form>

</div>
</section>

这是我的联系人组件TS文件:

userModel = new ContactFormComponent('','','','');
  public submitted: boolean;


  contactForm: FormGroup;

  constructor(private fb: FormBuilder) { }

  onSubmit({value, valid} : {value: ContactForm, valid: boolean}){
    this.submitted = true;
    console.log(value, valid);
  }



  ngOnInit() {
    this.contactForm = this.fb.group({
      name:['',[Validators.required, Validators.minLength(3)]],
      email:['',[Validators.required]],
      subject:['', [Validators.required]],
      message:['', [Validators.required]]
    });
  }

我已经足够让表单日志显示到控制台

这是在我的 api 文件,我的电子邮件信息模型中:

public class ContactInfo
    {
        [Required]
        public string Name { get; set; }        
        [Required]        
        public string Email { get; set; }
        [Required]
        public string Subject { get; set; }
        [Required]
        public string Message { get; set; } 

    }

到目前为止,这就是我的控制器中的全部内容:

public class emailController : ControllerBase
    {
        [HttpPost]
        public async Task SendEmail([FromBody] ContactInfo contact)
        {

        }


    }

我还没有创建任何 mailkit 端点,我也不知道如何将表单数据发送到 mailkit 端点。

能否请您演示我如何将此表单数据发送到 mailkit 端点,该端点会将提交的数据发送到我的收件箱?

【问题讨论】:

    标签: .net angular angular7 asp.net-core-webapi mailkit


    【解决方案1】:

    您可以在SendEmail 中使用此代码发送电子邮件。请注意,您应该通过在您的 gmail 相应选项卡中设置 smtp 来允许在 google 域之外使用 gmail。这是在 aspnet 核心中发送电子邮件的代码。

          var message = new MimeMessage();
          message.To.Add(new MailboxAddress("Recipient Name", "your@site.domaine"));
          message.From.Add(new MailboxAddress("From Name", contact.Email));
          message.Subject = contact.Subject;
          message.Body = new TextPart(TextFormat.Html)
          {
            Text = contact.Message + 
                  ". sent by: " + contact.Name + 
                  " E-mail: " + contact.Email
          };
          using (var emailClient = new SmtpClient())
          {
            emailClient.Connect("smtp.gmail.com", 587, false);
            emailClient.Authenticate("yougmail@gmail.com", "your_password");
            emailClient.Send(message);
            emailClient.Disconnect(true);
           }
    

    此外,您需要使用依赖注入来摆脱对 SmtpClient 对象 using (var emailClient = new SmtpClient()) 的处置。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-08-19
      • 2019-07-24
      • 2020-08-14
      • 1970-01-01
      • 2021-09-09
      • 2018-05-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多