Search... Ctrl + K

Send Email (gmail)
One script reply has been approved by the moderators Verified

Created by rossmccrann 119 days ago Used 961 times 3 Points

Send an email using Gmail without any attachments.

No comments yet

Points: 0
deno
One script reply has been approved by the moderators
Ap­pro­ved
import * as wmill from "https://deno.land/x/windmill@v1.27.2/mod.ts";
import {
  encode as base64UrlEncode,
} from "https://deno.land/std@0.82.0/encoding/base64url.ts";

/**
 * @param user_id User's email address. The special value `me` can be used to indicate the authenticated user.
 */
export async function main(
  gmail_auth: wmill.Resource<"gmail">,
  to_email: string,
  subject: string,
  message: string,
  user_id: string = "me"
) {
  const token = gmail_auth['token']
  if(!token) {
    throw Error(`
    No authentication token was found.
    Go to "https://app.windmill.dev/resources?connect_app=gmail" to connect Gmail, 
    then select your token from the dropdown in the arguments window.
    (Click "Refresh" if you don't see your resource in the list.)\n`)
  }

  const text = `From: <${user_id}>\nTo: <${to_email}>\nSubject: ${subject}\n\r ${message}`;
  const textEncoder = new TextEncoder();
  const email = base64UrlEncode(textEncoder.encode(text));
  const body = JSON.stringify({
    raw: email
  });
  const SEND_URL = `https://gmail.googleapis.com/gmail/v1/users/${user_id}/messages/send`;

  const response = await fetch(SEND_URL, {
    method: "POST",
    headers: { Authorization: "Bearer " + token },
    body
  });

  const result = await handleSendEmailResult(await response.json(), to_email);
  return result;
}

async function handleSendEmailResult(result: object, to_email: string) {
  if (Object.keys(result).includes('error')) {
    return Promise.reject({ wm_to_email: to_email, ...result });
  }

  return result;
}

Submitted by adam186 9 days ago

Edited 5 days ago

No comments yet