Мне нужно собрать некоторую информацию из формы и отправить ее по электронной почте. Благодаря этой статье (https://medium.com/@nickroach_50526 / send-emails-with- node-js -using-smtp-gmail-and-oauth2-316fe9c790a1 ) я могу аутентифицировать свою учетную запись gmail с помощью Oath2 и отправить электронное письмо по выполняется node sendEmail.js
.
Однако, когда я оборачиваю скрипт в функцию и вызываю его из дочернего компонента моего приложения реагирования. js, я получаю следующую ошибку: «TypeError: Cannot read property» OAuth2 'из неопределенного'.
Ни одно из найденных решений (например, https://github.com/googleapis/google-auth-library-nodejs/issues/355 или Google OAuth TypeError: Невозможно прочитать свойство 'OAuth2' из неопределенного ) решить мою проблема.
Это мой код:
sendEmail. 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"
traceback:
Я добавил 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
Как я могу вызвать почтовый скрипт из моего компонента?