这是很新的内容,因此,如果您以前曾问过这个问题,我深表歉意。我被要求创建一个网站,该网站显示公司员工针对问题开出的一系列票证。问题是,无论何时有人打开票证,更新票证的状态或对其进行注释,或者票证发生更改,票证的创建者都会收到一封电子邮件,而票证分配给的任何人也会收到一封电子邮件。
我的工作是创建一个网站,供员工访问并查看所有票证,当管理员对票证进行更改时,他/她将选择向订阅该网站的用户发送通知。< / p>
我正在使用React app,express,nodejs和所有这些好东西来完成此任务。我最近发现有关Nodemailer的信息,并在程序中使用了它,效果很好,但是每次运行程序时,它都会发送一封电子邮件。我希望每当我单击“通知”按钮并且选择票证时发生这种情况。这是我的按钮代码:
import React, { Component } from "react";
import { Button } from "reactstrap";
import axios from "axios";
class Submit extends Component {
constructor(props){
super(props);
this.handleClick = this.handleClick.bind(this);
}
handleClick() {
console.log("Notification sent!");
}
render() {
return (
<Button onClick={this.handleClick} color="danger" style={{ position:
"absolute", bottom: "1px" }}>
Send Notification
</Button>
);
}
}
export default Submit;
这是我的电子邮件的发送来源:
var transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'email@gmail.com',
pass: 'password'
}
});
let mailOptions = {
from: '"FirstLastname" email@gmail.com', // sender address
to: 'email@yahoo.com', // list of receivers
subject: 'hey there', // Subject line
text: 'Email notification sending', // plain text body
html: '<b>Notification!</b>' // html body
};
transporter.sendMail(mailOptions, (error, info) => {
if (error) {
return console.log(error);
}
console.log('Message sent: %s', info.messageId);
console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info))
});
module.exports = router;
答案 0 :(得分:0)
我认为您的问题是您在初始化类时调用transporter.sendMail
...
您需要将其包装在一个函数内,然后在Submit组件的handleClick
函数内对其进行调用。
我将通过这样的“帮助”类来实现此目的(注意:未经测试的代码示例!)
import nodemailer from 'nodemailer';
class NodemailerHelper {
constructor() {
this.transporter = nodemailer.createTransport({
service: 'gmail',
auth: {
user: 'email@gmail.com',
pass: 'password'
}
});
}
sendMail(from, to, subject, html) {
this.mailOptions = {
from: from,
to: to,
subject: subject,
html: html
};
this.transporter.sendMail(mailOptions, (error, info) => {
console.log('Message sent: %s', info.messageId);
console.log('Preview URL: %s', nodemailer.getTestMessageUrl(info))
if (error) {
return console.log(error);
}else {
return true;
}
});
}
}
const nodemailerHelper = new NodemailerHelper();
export default nodemailerHelper;
因此,现在您需要将nodemailerHelper
导入到Submit
组件中,只需从nodemailerHelper.sendMail(from, to, subject, html)
函数中调用handleClick