[firebase] Cloud Functions를 이용한 문의 기능 구현 [react.js]
Cloud Functions를 이용한 문의 기능 구현 [react.js]
이번에, react.js*firebase인 제품을 개발하고 있을 때,
문의 폼의 구현이 필요했으므로 여기에 구현의 순서를 두어 둡니다.
일반적인 gmail을 메일 서버로 메일 전송 기능을 실현시킵니다.
또 실장에 있어서, 이 기사 를 참고로 했습니다. 뭐라면 모두 여기에 기재되어 있습니다.
1.firebase project 설정
이 기사 을 확인해 주십시오.
2.function 설정
functions/index.jsconst functions = require("firebase-functions");
const nodemailer = require("nodemailer");
const gmailEmail = functions.config().gmail.email;
const gmailPassword = functions.config().gmail.password;
const adminEmail = functions.config().admin.email;
// 送信に使用するメールサーバーの設定
const mailTransport = nodemailer.createTransport({
service: "gmail",
auth: {
user: gmailEmail,
pass: gmailPassword
}
});
// 管理者用のメールテンプレート
const adminContents = data => {
return `以下内容でホームページよりお問い合わせを受けました。
お名前:
${data.name}
メールアドレス:
${data.email}
内容:
${data.content}
`;
};
exports.sendMail = functions.https.onCall((data, context) => {
// メール設定
let adminMail = {
from: gmailEmail,
to: adminEmail,
subject: "ホームページお問い合わせ",
text: adminContents(data)
};
// 管理者へのメール送信
mailTransport.sendMail(adminMail, (err, info) => {
if (err) {
return console.error(`send failed. ${err}`);
}
return console.log("send success.");
});
});
3. 프론트(react.js) 설정
react 프로젝트 내에서 firebase(Cloud Functions)를 이용할 수 있도록 아래의 설명을 잊지 마세요.
firebase/firebase.jsimport firebase from 'firebase';
import 'firebase/auth';
const config = {
apiKey: "********************",
authDomain: "********************",
databaseURL: "********************",
projectId: "********************",
storageBucket: "********************",
messagingSenderId: "********************"
}
firebase.initializeApp(config);
아래는 문의 양식입니다.
문의 양식
import React, { Component } from 'react';
import TextField from '@material-ui/core/TextField';
import Button from '@material-ui/core/Button'
const firebase = require("firebase");
require("firebase/functions");
class ContactForm extends Component {
constructor(){
super()
this.onSubmit = this.onSubmit.bind(this)
}
onSubmit(e){
e.preventDefault()
let data = {}
data.name = e.target.name.value
data.email = e.target.email.value
data.content = e.target.content.value
let sendMail = firebase.functions().httpsCallable('sendMail');
sendMail(data)
e.target.name.value = ""
e.target.email.value = ""
e.target.content.value = ""
e.target.value = ""
}
render() {
const textFieldStyle = {
display: "flex",
width: "300px",
}
const contactForm = {
display: "flex",
flexDirection: "column",
alignItems: "center",
marginTop: "100px",
}
return (
<React.Fragment>
<div style={contactForm}>
<h2>お問い合わせ</h2>
<form onSubmit={this.onSubmit}>
<TextField name="name" label="お名前" type="text" required style={textFieldStyle} />
<TextField name="email" label="メールアドレス" type="mail" required style={textFieldStyle} />
<TextField
required
name="content"
label="お問い合わせ内容"
multiline
rows="8"
margin="normal"
variant="outlined"
style={textFieldStyle}
/>
<Button variant="contained" color="primary" type="submit" style={textFieldStyle} >
送信
</Button>
</form>
</div>
</React.Fragment>
)
}
}
export default ContactForm
material-ui를 추가하지 않은 분은 여기
$ npm install @material-ui
이상이 됩니다.
Reference
이 문제에 관하여([firebase] Cloud Functions를 이용한 문의 기능 구현 [react.js]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/katsuomi/items/19dd6f3e33d795ba0e96
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
const functions = require("firebase-functions");
const nodemailer = require("nodemailer");
const gmailEmail = functions.config().gmail.email;
const gmailPassword = functions.config().gmail.password;
const adminEmail = functions.config().admin.email;
// 送信に使用するメールサーバーの設定
const mailTransport = nodemailer.createTransport({
service: "gmail",
auth: {
user: gmailEmail,
pass: gmailPassword
}
});
// 管理者用のメールテンプレート
const adminContents = data => {
return `以下内容でホームページよりお問い合わせを受けました。
お名前:
${data.name}
メールアドレス:
${data.email}
内容:
${data.content}
`;
};
exports.sendMail = functions.https.onCall((data, context) => {
// メール設定
let adminMail = {
from: gmailEmail,
to: adminEmail,
subject: "ホームページお問い合わせ",
text: adminContents(data)
};
// 管理者へのメール送信
mailTransport.sendMail(adminMail, (err, info) => {
if (err) {
return console.error(`send failed. ${err}`);
}
return console.log("send success.");
});
});
import firebase from 'firebase';
import 'firebase/auth';
const config = {
apiKey: "********************",
authDomain: "********************",
databaseURL: "********************",
projectId: "********************",
storageBucket: "********************",
messagingSenderId: "********************"
}
firebase.initializeApp(config);
import React, { Component } from 'react';
import TextField from '@material-ui/core/TextField';
import Button from '@material-ui/core/Button'
const firebase = require("firebase");
require("firebase/functions");
class ContactForm extends Component {
constructor(){
super()
this.onSubmit = this.onSubmit.bind(this)
}
onSubmit(e){
e.preventDefault()
let data = {}
data.name = e.target.name.value
data.email = e.target.email.value
data.content = e.target.content.value
let sendMail = firebase.functions().httpsCallable('sendMail');
sendMail(data)
e.target.name.value = ""
e.target.email.value = ""
e.target.content.value = ""
e.target.value = ""
}
render() {
const textFieldStyle = {
display: "flex",
width: "300px",
}
const contactForm = {
display: "flex",
flexDirection: "column",
alignItems: "center",
marginTop: "100px",
}
return (
<React.Fragment>
<div style={contactForm}>
<h2>お問い合わせ</h2>
<form onSubmit={this.onSubmit}>
<TextField name="name" label="お名前" type="text" required style={textFieldStyle} />
<TextField name="email" label="メールアドレス" type="mail" required style={textFieldStyle} />
<TextField
required
name="content"
label="お問い合わせ内容"
multiline
rows="8"
margin="normal"
variant="outlined"
style={textFieldStyle}
/>
<Button variant="contained" color="primary" type="submit" style={textFieldStyle} >
送信
</Button>
</form>
</div>
</React.Fragment>
)
}
}
export default ContactForm
$ npm install @material-ui
Reference
이 문제에 관하여([firebase] Cloud Functions를 이용한 문의 기능 구현 [react.js]), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/katsuomi/items/19dd6f3e33d795ba0e96텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)