gpt4 book ai didi

node.js - 从 Angular 2 发送电子邮件

转载 作者:太空狗 更新时间:2023-10-29 17:20:01 24 4
gpt4 key购买 nike

如何从 Angular 2 应用程序发送电子邮件?

我在 firebase 上托管了一个 Angular 2 应用程序。我想通过电子邮件发送联系表格。理想情况下,我的解决方案将使用 Nodejs,但我愿意使用任何能够正确完成工作的东西。以下是我的应用程序的分割。


客户端进度

这是我的表格:

<!-- contact-form.component.html -->

<form [formGroup]="formService.contactForm" (ngSubmit)="formService.onSubmitForm()">

<input type="text" formControlName="userFirstName">
<label>First Name</label>

<input type="text" formControlName="userLastName">
<label>Last Name</label>

<button type="submit">SUBMIT</button>

</form>


这是我的联系表单组件:

// contact-form.component.ts
import { Component } from '@angular/core';

import { ContactFormService } from './contact-form.service';

@Component({
selector: 'contact-form',
templateUrl: './contact-form.component.html',
styleUrls: ['./contact-content.component.css'],
providers: [ContactFormService]
})
export class ContactFormComponent {

constructor(private formService: ContactFormService) {
formService.buildForm();
}

}

这是我的联系表单服务:

// contact-form.service.ts

import { Injectable } from '@angular/core';

import { FormGroup, FormBuilder, FormControl, Validators } from '@angular/forms';


@Injectable()
export class ContactFormService {

constructor(public formBuilder: FormBuilder) { }

contactForm: FormGroup;
formSubmitted: boolean = false;


buildForm() {
this.contactForm = this.formBuilder.group({
userFirstName: this.formBuilder.control(null, Validators.required),
userLastName: this.formBuilder.control(null, Validators.required)
});
}

onSubmitForm() {
console.log(this.contactForm.value);
this.formSubmitted = true;
this.contactForm.reset();
}

}

当我点击提交按钮时,表单数据将成功显示在控制台中。


服务端Nodejs进度

我可以使用 SendGrid 和 Nodejs 从命令提示符成功发送电子邮件:

例子:sendmail.js

var Sendgrid = require('sendgrid')(
process.env.SENDGRID_API_KEY || '<my-api-key-placed-here>'
);

var request = Sendgrid.emptyRequest({
method: 'POST',
path: '/v3/mail/send',
body: {
personalizations: [{
to: [{ email: 'my.email@gmail.com' }],
subject: 'Sendgrid test email from Node.js'
}],
from: { email: 'noreply@email-app.firebaseapp.com' },
content: [{
type: 'text/plain',
value: 'Hello Joe! Can you hear me Joe?.'
}]
}
});

Sendgrid.API(request, function (error, response) {
if (error) {
console.log('Mail not sent; see error message below.');
} else {
console.log('Mail sent successfully!');
}
console.log(response);
});

然后如果我在命令提示符中键入以下内容,电子邮件将成功发送:

node sendmail

但是,我不知道如何将我提交的表单数据链接到 sendmail.js,也不知道如何通过单击提交按钮激活 sendmail.js 中的代码。

如有任何帮助,我们将不胜感激。感谢您的宝贵时间!

最佳答案

尝试将您的 sendmail.js 重写为 rest 服务,例如:

const Sendgrid = require('sendgrid')(
process.env.SENDGRID_API_KEY || '<my-api-key-placed-here>'
);

const express = require('express');
const bodyParser = require('body-parser');
const app = express();

// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());

app.post('/send-mail', function (req, res) {
// PUT your send mail logic here, req.body should have your fsubmitted form's values
sendMail(req.body);
res.header("Access-Control-Allow-Origin", "*");
res.header("Access-Control-Allow-Headers", "X-Requested-With");
res.send('SEND MAIL');
})

app.listen(3000, function () {
console.log('LISTENING on port 3000');
})


function sendMail(formData) {
let request = Sendgrid.emptyRequest({
method: 'POST',
path: '/v3/mail/send',
body: {
personalizations: [{
to: [{ email: 'my.email@gmail.com' }],
subject: 'Sendgrid test email from Node.js'
}],
from: { email: 'noreply@email-app.firebaseapp.com' },
content: [{
type: 'text/plain',
value: `Hello ${formData.userFirstName} ${formData.userLastName}! Can you hear me ${formData.userFirstName}?.`
}]
}
});

Sendgrid.API(request, function (error, response) {
if (error) {
console.log('Mail not sent; see error message below.');
} else {
console.log('Mail sent successfully!');
}
console.log(response);
});
}

请注意,我在电子邮件正文中使用了表单数据

然后在你的提交函数中执行

http.post('http://localhost:3000/send-mail', this.contactForm.value);

关于node.js - 从 Angular 2 发送电子邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43192772/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com