Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何运行nodeEmailer+;react.js应用程序中的gmail API脚本?_Node.js_Reactjs_Google Api_Gmail Api_Nodemailer - Fatal编程技术网

Node.js 如何运行nodeEmailer+;react.js应用程序中的gmail API脚本?

Node.js 如何运行nodeEmailer+;react.js应用程序中的gmail API脚本?,node.js,reactjs,google-api,gmail-api,nodemailer,Node.js,Reactjs,Google Api,Gmail Api,Nodemailer,我需要从表格中收集一些信息并通过电子邮件发送。 感谢本文()我可以通过Oath2验证我的gmail帐户,并通过运行node sendmail.js发送电子邮件 但是,当我将脚本包装到函数中并从react.js应用程序的子组件调用它时,会出现以下错误: 'TypeError:无法读取未定义的属性'OAuth2' 没有一个解决方案能解决我的问题 这是我的代码: sendmail.js export function sendEmail (eMailContent) { const nodema

我需要从表格中收集一些信息并通过电子邮件发送。 感谢本文()我可以通过Oath2验证我的gmail帐户,并通过运行
node sendmail.js
发送电子邮件

但是,当我将脚本包装到函数中并从react.js应用程序的子组件调用它时,会出现以下错误: 'TypeError:无法读取未定义的属性'OAuth2'

没有一个解决方案能解决我的问题

这是我的代码:

sendmail.js

export function sendEmail (eMailContent) {

  const nodemailer = require("nodemailer");
  const { google } = require("googleapis");
  console.log("google: ", google);
  const OAuth2 = google.auth.OAuth2;

  const oauth2Client = new OAuth2(
    "XXXXXX.apps.googleusercontent.com", // ClientID
    "XXXXXXX", // Client Secret
    "https://developers.google.com/oauthplayground" // Redirect URL
  );

  oauth2Client.setCredentials({
    refresh_token: "XXXXXXXX"
  });
  const accessToken = oauth2Client.getAccessToken()

  const smtpTransport = nodemailer.createTransport({
    service: "gmail",
    auth: {
        type: "OAuth2",
        user: "name@domain.com", 
        clientId: "XXXXXXXXXXXX.apps.googleusercontent.com",
        clientSecret: "XXXXXXXXXX",
        refreshToken: "XXXXXXXXXXXXXX",
        accessToken: accessToken
    }
  });

  const mailOptions = {
    from: "name@domain.com",
    to: "name@domain.com",
    subject: "something",
    generateTextFromHTML: true,
    html: eMailContent
  };

  smtpTransport.sendMail(mailOptions, (error, response) => {
    error ? console.log(error) : console.log(response);
    smtpTransport.close();
  });

}
childComponent.jsx

...
import { sendEmail } from '../sendEmail.js'

class childComponent extends Component {
  render() {
    ...
    }

    sendEmail(this.props.eMailContent)

    return (
      <div>

        ...

      </div>
    );
  }
}

export default childComponent;
回溯:

"@testing-library/jest-dom": "^4.2.4",
"@testing-library/react": "^9.3.2",
"@testing-library/user-event": "^7.1.2",
"bootstrap": "^4.4.1",
"googleapis": "^47.0.0",
"jquery": "^3.4.1",
"node-sass": "^4.13.1",
"nodemailer": "^6.4.2",
"popper.js": "^1.16.0",
"react": "^16.12.0",
"react-bootstrap": "^1.0.0-beta.16",
"react-dom": "^16.12.0",
"react-router-dom": "^5.1.2",
"react-scripts": "3.3.0"
我添加了
console.trace()函数内部,这是回溯:

sendEmail   @   sendEmail.js:8
render  @   ThanksModal.jsx:15
finishClassComponent    @   react-dom.development.js:18470
updateClassComponent    @   react-dom.development.js:18423
beginWork$1 @   react-dom.development.js:20186
beginWork$$1    @   react-dom.development.js:25756
performUnitOfWork   @   react-dom.development.js:24698
workLoopSync    @   react-dom.development.js:24671
performSyncWorkOnRoot   @   react-dom.development.js:24270
(anonymous) @   react-dom.development.js:12199
unstable_runWithPriority    @   scheduler.development.js:697
runWithPriority$2   @   react-dom.development.js:12149
flushSyncCallbackQueueImpl  @   react-dom.development.js:12194
flushSyncCallbackQueue  @   react-dom.development.js:12182
discreteUpdates$1   @   react-dom.development.js:24423
discreteUpdates @   react-dom.development.js:1438
dispatchDiscreteEvent   @   react-dom.development.js:5881

如何从组件调用邮件脚本?

您能提供回溯吗?我已经在问题中添加了回溯。