Skip to content

Instantly share code, notes, and snippets.

View alexandermckay's full-sized avatar

Alex McKay alexandermckay

View GitHub Profile
@alexandermckay
alexandermckay / minimum-viable-function-a.js
Created October 19, 2019 08:57
minimum-viable-function-a
const admin = require('firebase-admin');
const sendEmail = require('./sendEmail'); // doesn't exist yet
admin.initializeApp();
exports.sendEmail = sendEmail;
@alexandermckay
alexandermckay / minimum-viable-function-b.js
Last active October 19, 2019 09:01
minimum-viable-function-b.js
const { https } = require('firebase-functions');
const sendEmail = https.onRequest((req, res) => {
res.send({ status: 200 });
});
module.exports = sendEmail;
@alexandermckay
alexandermckay / send-mail.js
Created October 19, 2019 09:24
send-mail.js
const { https } = require('firebase-functions');
const { createTransport } = require('nodemailer');
const sender = '<THE_EMAIL_YOU_JUST_CREATED';
const password = '<THE_PASSWORD_YOU_JUST_CREATED>';
const recipient = '<THE_EMAIL_YOU_ARE_SENDING_TO>';
const transporter = createTransport({
service: 'gmail',
auth: {
@alexandermckay
alexandermckay / firebase-config.sh
Last active October 19, 2019 09:40
firebase-config.sh
firebase functions:config:set gmail.sender=<YOUR_EMAIL> gmail.password=<YOUR_PASSWORD> gmail.recipient=<TO_EMAIL>
@alexandermckay
alexandermckay / improving-the-function.js
Created October 19, 2019 09:42
improving-the-function.js
const {
gmail: { password, recipient, sender },
} = config();
const transporter = createTransport({
service: 'gmail',
auth: {
user: sender,
pass: password,
},
@alexandermckay
alexandermckay / dynamic-content.js
Created October 19, 2019 09:46
dynamic-content.js
const mailOptions = ({ subject, name, message }) => {
const text = `
Name: ${name}
Message: ${message}
`;
const html = `
<h1>Name: ${name}</h1>
<p>Message: ${message}</p>
`;
@alexandermckay
alexandermckay / react-app.js
Created October 19, 2019 09:59
react-app.js
import Axios from 'axios';
import React, { useState } from 'react';
const sendEmailURL = '<YOUR_FUNCTION_URL>';
function App() {
const [state, setState] = useState({
message: '',
name: '',
subject: '',
@alexandermckay
alexandermckay / cors.js
Created October 19, 2019 10:05
cors.js
const cors = require('cors');
const corsHandler = cors({ origin: true });
/* Your other code */
const handleEmail = (req, res) => {
corsHandler(req, res, () => {
transporter.sendMail(mailOptions(req.query), transport);
});
@alexandermckay
alexandermckay / eifp-for-each.js
Last active February 7, 2020 00:41
EiFP - For Each
const a = [1, 2, 4]
forEach(console.log, a)
// [1, 2, 4]
{
// ...other fields
"name": "slack",
"publicName": "Slack"
"author": "Slack Inc."
"build": {
"appId": "com.slack.desktop",
"copyright": "Copyright 2020 Slack"
}
// ...other fields