Giter Club home page Giter Club logo

gmail.js's Introduction

Gmail.js - JavaScript API for Gmail

Note: This is not an official Gmail API, and isn't affiliated with Google.

Note: Gmail.js requires jQuery to work

TL;DR Summary

  • Lots of api methods to work with gmail. Useful for chrome extensions
  • Most of them dont take arguments, they work on what is currently visible on the screen
  • I still need to add implementation for chrome extension, works by injecting js for now
  • Main method is gmail.observe.on('lots_of_actions_here', callback())
  • Click on a method link to view more detailed docs
  • Create an issue/pull request for feedback, requests and fixes

Examples

Setup

  • Gmail.js requires jQuery to work

Quick Usage - Chrome Console

// {inject jquery.js} by copy pasting this in your console
var jq = document.createElement('script');
jq.src = "https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js";
document.getElementsByTagName('body')[0].appendChild(jq);

// {inject gmail.js} by copy pasting gmail.js contents or via url like jquery above
// var Gmail = {.....} // paste gmail.js code here

// start using!
var gmail = Gmail();
gmail.get.user_email();

Methods

Summary (click for more info)

GET

CHECK

CHAT

OBSERVE

  • gmail.observe .http_requests()
  • gmail.observe .actions()
  • gmail.observe .off(action)
  • gmail.observe .on(action, callback)
    • poll - When gmail automatically polls the server to check for new emails every few seconds
    • new_email - When a new email appears in the inbox
    • open_email - When an email is opened from the inbox view
    • refresh - When you click the refresh button
    • unread - When a conversation(s) is marked unread
    • read - When a conversation(s) is marked read
    • delete - When a conversation(s) is deleted
    • delete_message_in_thread - When a conversation(s) is deleted inside a thread
    • mark_as_spam - When a conversation(s) is marked as spam
    • mark_as_not_spam - When a conversation(s) is unchecked as spam
    • label - When a conversation(s) get applied a label
    • archive - When a conversation(s) is archieved
    • move_to_inbox - When a conversation(s) is moved to the inbox
    • delete_forever - When a conversation(s) is deleted forever
    • star - When a conversation(s) is starred
    • unstar - When a conversation(s) is unstarred
    • mark_as_important - When a conversation(s) is marked as important
    • mark_as_not_important - When a conversation(s) is marked as not important
    • filter_messages_like_these - When a filter button is triggered for a conversation
    • mute - When a conversation(s) is muted
    • unmute - When a conversation(s) is unmuted
    • add_to_tasks - When an item is added to google tasks
    • move_label - When a conversation(s) is moved to a label folder
    • save_draft - When a draft is saved
    • discard_draft - When a draft is dicarded
    • send_message - When a message is sent
    • expand_categories - When a category is expanded from the left nav sidebar
    • restore_message_in_thread - When a deleted message is restored inside a thread
    • delete_label - When a label is deleted
    • show_newly_arrived_message - When inside an email and a new email arrives in the thread

DOM

These methods return the DOM data itself

  • gmail.dom .inboxes()
  • gmail.dom .inbox_content()
  • gmail.dom .email_subject()
  • gmail.dom .email_body()
  • gmail.dom .email_contents()
  • gmail.dom .get_left_sidebar_links()
  • gmail.dom .search_bar()

TOOLS

These are some helper functions that the rest of the methods use. See source for input params

  • gmail.tools infobox(message, time)
    • Adds the yellow info box on top of gmail with the given message
  • gmail.tools .xhr_watcher()
  • gmail.tools .parse_url()
  • gmail.tools .deparam()
  • gmail.tools .parse_view_data()
  • gmail.tools .parse_email_data()
  • gmail.tools .extract_email_address(str)
  • gmail.tools .extract_name(str)
  • gmail.tools .make_request()
  • gmail.tools .sleep(ms)
  • gmail.tools .multitry(ms_delay, tries, func, bool_success_check)
  • gmail.tools .i18n(label)

TRACKER

These are some of the variables that are tracked and kept in memory while the rest of the methods are in use.

  • gmail.version
  • gmail.tracker .events
  • gmail.tracker .xhr_init
  • gmail.tracker .xhr_open
  • gmail.tracker .xhr_send
  • gmail.tracker .watchdog
  • gmail.tracker .view_data
  • gmail.tracker .email_data
  • gmail.tracker .ik
  • gmail.tracker .rid

Details

gmail.get.visible_emails()

Returns a list of emails from the server that are currently visible in the inbox view. The data does not come from the DOM

[{"id": "1425a3693a4c45d0",
  "title": "<b>What if video games were real? On YouTube</b>",
  "excerpt": "View email in a web browser Header Super Mario Brothers Parkour by Warialasky Super Mario Brothers",
  "time": "Fri, Nov 15, 2013 at 12:23 AM",
  "sender": "[email protected]",
  "attachment": "",
  "labels": ["^all", "^i", "^smartlabel_social", "^unsub"]}]

gmail.get.email_data(email_id=undefined)

Returns an object representation of the opened email contents and metadata. It takes the optional email_id parameter where the data for the specified id is returned instead of the email currently visible in the dom

{
  "first_email": "141d44da39d6caf8",
  "last_email": "141d44da39d6caf8",
  "total_emails": 1,
  "total_threads": ["141d44da39d6caf8"],
  "people_involved": [
    ["Kartik Talwar", "[email protected]"],
    ["California", "[email protected]"]
  ],
  "subject": "test",
  "threads": {
    "141d44da39d6caf8": {
      "reply_to_id": "",
      "is_deleted" : false,
      "from": "California",
      "to" : ["[email protected]"],
      "cc" : [],
      "bcc" : [],
      "from_email": "[email protected]",
      "timestamp": 1382246359000,
      "datetime": "Sun, Nov 20, 2013 at 1:19 AM",
      "content_plain": "another test",
      "subject": "test",
      "content_html": "<div dir=\"ltr\">another test</div>\n"
    }
  }
}

gmail.get.displayed_email_data()

Returns an object representation of the emails that are being displayed.

{
  "first_email": "145881e7a8befff6",
  "last_email": "145881e7a8befff6",
  "total_emails": 1,
  "total_threads": ["145881e7a8befff6"],
  "people_involved": [
    ["Kartik Talwar", "[email protected]"],
    ["California", "[email protected]"]
  ],
  "subject": "test",
  "threads": {
    "145881e7a8befff6": {
      "reply_to_id": "",
      "is_deleted" : false,
      "from": "California",
      "to" : ["[email protected]"],
      "cc" : [],
      "bcc" : [],
      "from_email": "[email protected]",
      "timestamp": 1382246359000,
      "datetime": "Sun, Nov 20, 2013 at 1:19 AM",
      "content_plain": "another test",
      "subject": "test",
      "content_html": "<div dir=\"ltr\">another test</div>\n"
    }
  }
}

gmail.get.user_email()

Returns the current user's email address

gmail.get.storage_info()

Returns current user's file storage stats

{
  "used": "0 GB",
  "total": "15 GB",
  "percent": 0
}

gmail.get.current_page()

Returns what page of gmail the user is currently on. These are the possible responses

['sent', 'inbox', 'starred', 'drafts', 'imp', 'chats', 'all', 'spam', 'trash', 'settings'] // pages
null // inside email conversation
"/search/[.+]" // inside search view
"/label/[.+]" // inside label view
"/category/[.+]" // inside category view
"/settings/[.+]" // settings sub-page (excluding settings root page)

gmail.get.email_subject()

Returns the opened email's subject from the DOM

"test"

gmail.get.email_id()

Gets current email's ID

"141de25dc0b48e4f"

gmail.get.email_ids()

Returns a list of email IDs for each thread in the conversation

["141de25dc0b48e4f"]

gmail.get.compose_ids()

Returns the latest/last email id of emails that have been saved as drafts (currently open)

["14469c73bba6ff53", "14469c7b8581ccfa"]

gmail.get.search_query()

Returns the search bar data

"from:[email protected] is:unread"

gmail.get.unread_emails()

Returns a count of total unread emails for the current account.

{
  "inbox": 2,
  "drafts": 0,
  "spam": 0,
  "forum": 0,
  "notifications": 0,
  "promotions": 0,
  "social": 0
}

You can also request the data individually

  • gmail.get.unread_inbox_emails()
  • gmail.get.unread_draft_emails()
  • gmail.get.unread_spam_emails()
  • gmail.get.unread_forum_emails()
  • gmail.get.unread_update_emails()
  • gmail.get.unread_promotion_emails()
  • gmail.get.unread_social_emails()

gmail.get.last_active()

Gets user's account activity data

{
  "time": "9:41 pm",
  "ip": "54.234.192.48",
  "mac_address": "2620:101:f000:702:a966:ab42:4a46:195e",
  "time_relative": "31 minutes ago"
}

gmail.get.loggedin_accounts()

Returns a list of signed-in accounts (multiple user accounts setup in gmail)

[{"name":"California","email":"[email protected]"}]

gmail.get.beta()

Although hand picked, this method returns the checks on beta features and deployments

{"new_nav_bar":true}

gmail.check.is_thread()

Returns True if the conversation is threaded False otherwise

gmail.check.is_preview_pane()

Returns True if gmail is in split pane mode (vertical or horizontal) False otherwise

gmail.check.is_multiple_inbox()

Returns True if user has multiple inbox lab enabled, False otherwise

gmail.check.is_horizontal_split()

Returns True if the pane split mode is horiontal False otherwise

gmail.check.are_shortcuts_enabled()

Returns True if user has enabled mail action shortcuts, False otherwise

gmail.check.is_vertical_split()

Returns True if the pane mode is vertical False otherwise

gmail.check.is_tabbed_inbox()

Returns True if tabbed inbox view is enabled False otherwise

gmail.check.is_right_side_chat()

Returns True if chat is on the right sidebar False otherwise

gmail.check.is_conversation_view()

Returns True if emails are displayed as threads, False otherwise (i.e. displayed individually)

gmail.check.is_google_apps_user()

Returns True if the current user is google apps user (email not ending in gmail.com) False otherwise

gmail.check.is_inside_email()

Returns True if you are currently inside an email conversation False otherwise

gmail.check.is_priority_inbox()

Returns True if priority inbox is enabled False otherwise

gmail.check.is_rapportive_installed()

Returns True if rapportive chrome extension is installed False otherwise

gmail.check.is_streak_installed()

Returns True if streak chrome extension is installed False otherwise

gmail.check.is_anydo_installed()

Returns True if any.do chrome extension is installed False otherwise

gmail.check.is_boomerang_installed()

Returns True if boomerang chrome extension is installed False otherwise

gmail.check.is_xobni_installed()

Returns True if xobni chrome extension is installed False otherwise

gmail.check.is_signal_installed()

Returns True if Signal chrome extension is installed False otherwise

gmail.chat.is_hangouts()

Returns True if the account supports the new hangout UI for chat False otherwise (native chat window)

gmail.observe.http_requests()

After the gmail.obsere.on() has been initiated, this method keeps track of the last 50 http events. The items contain the sent requested parameterized data

[{
  "method": "POST",
  "url": {
    "ui": "2",
    "ik": "13fa7f7088",
    "rid": "ed0e..",
    "view": "tl",
    "start": "0",
    "num": "30",
    "lhop": "169846",
    "ltup": "%5Ei",
    "slmm": "1427abc6106ac10b",
    "scid": "q2h353hw6dv9",
    "avw": "1194",
    "ntlv": "10",
    "auto": "1",
    "ver": "-z-h-bKmWwI.en.",
    "am": "!6hSPXvkvPMjmReGu2-2BQXCk3IltF-jNSk0J8Cg_jNeaoSbpJgHQYdkXe6T_WPYyyATD3DSiOA",
    "vas": "1",
    "ari": "120",
    "_reqid": "4582876",
    "pcd": "1",
    "mb": "0",
    "rt": "j",
    "search": "inbox"
  },
  "body": "",
  "url_raw": "?ui=2&ik=13fa7f7088&rid=ed0e..&view=tl&start=0&num=30&lhop=169846&ltup=%5Ei&slmm=1427abc6106ac10b&scid=q2h353hw6dv9&avw=1194&ntlv=10&auto=1&ver=-z-h-bKmWwI.en.&am=!6hSPXvkvPMjmReGu2-2BQXCk3IltF-jNSk0J8Cg_jNeaoSbpJgHQYdkXe6T_WPYyyATD3DSiOA&vas=1&ari=120&_reqid=4582876&pcd=1&mb=0&rt=j&search=inbox"
}]

gmail.observe.actions()

Similar to gmail.obsere.http_requests() this keeps track of the last 10 gmail actions (vs all http requests). Actions here correspond to things like clicking refres, archiving, deleting, starring etc.

gmail.observe.on(action, callback)

This is the key feature of gmail.js. This method allows you to add triggers to all of these actions so you can build your custom extension/tool with this library.

You simply specify the action nane and your function that the method will return data to when the actions are triggered and it does the rest. You can have multiple triggers

Available Actions

  • poll - When gmail automatically polls the server to check for new emails every few seconds
  • new_email - When a new email appears in the inbox
  • open_email - When a new email appears in the inbox
  • refresh - When you click the refresh button
  • unread - When a conversation(s) is marked unread
  • read - When a conversation(s) is marked read
  • delete - When a conversation(s) is deleted
  • delete_message_in_thread - When a conversation(s) is deleted inside and is part of a thread
  • mark_as_spam - When a conversation(s) is marked as spam
  • mark_as_not_spam - When a conversation(s) is unchecked as spam
  • label - When a conversation(s) get applied a label
  • archive - When a conversation(s) is archieved
  • move_to_inbox - When a conversation(s) is moved to the inbox
  • delete_forever - When a conversation(s) is deleted forever
  • star - When a conversation(s) is starred
  • unstar - When a conversation(s) is unstarred
  • mark_as_important - When a conversation(s) is marked as important
  • mark_as_not_important - When a conversation(s) is marked as not important
  • filter_messages_like_these - When a filter button is triggered for a conversation
  • mute - When a conversation(s) is muted
  • unmute - When a conversation(s) is unmuted
  • add_to_tasks - When an item is added to google tasks
  • move_label - When a conversation(s) is moved to a label folder
  • save_draft - When a draft is saved
  • discard_draft - When a draft is dicarded
  • send_message - When a message is sent
  • expand_categories - When a category is expanded from the left nav sidebar
  • restore_message_in_thread - When a deleted message is restored inside a thread
  • delete_label - When a label is deleted
  • show_newly_arrived_message - When inside an email and a new email arrives in the thread
gmail.observe.on("unread", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("read", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("delete", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("mark_as_spam", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("mark_as_not_spam", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("label", function(id, url, body, label) {
  console.log("id:", id, "url:", url, 'body', body, "label", label);
})

gmail.observe.on("archive", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("move_to_inbox", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("delete_forever", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("delete_message_in_thread", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("restore_message_in_thread", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("star", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("unstar", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("mark_as_important", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("mark_as_not_important", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("filter_messages_like_these", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("mute", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("unmute", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("add_to_tasks", function(url, body, data) {
  console.log("url:", url, 'body', body, 'task_data', data);
})

gmail.observe.on("move_label", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("save_draft", function(url, body, data) {
  console.log("url:", url, 'body', body, 'email_data', data);
})

gmail.observe.on("discard_draft", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("send_message", function(url, body, data) {
  console.log("url:", url, 'body', body, 'email_data', data);
})

gmail.observe.on("expand_categories", function(url, body, data) {
  console.log("url:", url, 'body', body, 'expanded_data', data);
})

gmail.observe.on("delete_label", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("show_newly_arrived_message", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("poll", function(url, body, data) {
  console.log("url:", url, 'body', body, 'data', data);
})

gmail.observe.on("new_email", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
})

gmail.observe.on("refresh", function(url, body, data) {
  console.log("url:", url, 'body', body, 'data', data);
})

gmail.observe.on("open_email", function(id, url, body) {
  console.log("id:", id, "url:", url, 'body', body);
  console.log(gmail.get.email_data(id));
})

gmail.observe.off(action=null)

Turn off an observe action. Providing it no argument will disable all observers.

gmail.observe.on('poll', function(x,y,z){});
gmail.observe.on('refresh', function(x,y,z){});

gmail.observe.off('poll'); // disables poll
gmail.observe.off();  // disables both

Author and Licensing

twitter/therealkartik Inspired by gmailr.js
Kartik Talwar See License.md

gmail.js's People

Contributors

kartiktalwar avatar generalzero avatar ginotria avatar courthead avatar liquidmetal avatar xavi- avatar caex avatar gavinmcdermott avatar patrickjs avatar yeukhon avatar

Stargazers

Jordan Matelsky avatar Leo Rudberg avatar Alex Vallorosi avatar

Watchers

Jason Berlinsky avatar Nathan Handler avatar Nicolas Grenié avatar Cam H avatar harvey cheng avatar Alexey Komissarouk avatar Bob Timm avatar William Wolf avatar Ari Weinstein avatar Greg Carlin avatar Kumail Jaffer avatar Alex Vallorosi avatar Vlad Temian avatar Jonathan Jemson avatar Yasyf Mohamedali avatar Francis Hinson avatar James Cloos avatar Canzhi Ye avatar Ruiqi Mao avatar Iheanyi Ekechukwu avatar  avatar Matt Privman avatar Hima avatar Max avatar Sean Gransee avatar Vishnu Ravi avatar Matthew Herbst avatar  avatar Bryan Duffy avatar Greyson Parrelli avatar Alisha Ukani avatar Nick Heindl avatar Jeremy Cantu avatar Lars avatar Kevin Frans avatar Brendan Ryan avatar Akshay Dixit avatar michael avatar Ben Iofel avatar Arya Boudaie avatar Austin Feight avatar Eva Zheng avatar Nick Virag avatar Chen Ye avatar Henry Boldizsar avatar Doron Zehavi avatar Eytan Schulman avatar Natasja Nielsen avatar Yuya Jeremy Ong avatar Spencer Elliott avatar Tosin Afolabi avatar Robby Cohen avatar Cole Kushner avatar Brian Kim avatar Benjamin Cohen avatar Nate Levesque avatar Mike Shi avatar Joshua Angelucci avatar Sebastian Trif avatar Megan avatar Brynn Claypoole avatar Alex C Gonzales avatar Rohith Varanasi avatar Andrew Rochman avatar ritvik avatar Aaroh Mankad avatar Syed Raziq Mohideen avatar raph avatar Farrukh Jadoon avatar Zubin Pahuja avatar  avatar  avatar Jesse Hu avatar  avatar Stanley Zheng avatar Leo Rudberg avatar Matisse avatar Andrew Breckenridge avatar John Moosemiller avatar Robert Kim avatar Lilly Habashi avatar Asher King Abramson avatar Nischay Mohan avatar Aloke Desai avatar Ankit Ranjan avatar Nishil Shah avatar Brandon Barker avatar Frank Cangialosi avatar Sattvik Kansal avatar Jonathan Kau avatar Karrie Cheng avatar Anindya Guha avatar Garrett avatar Krish Dholakiya avatar Hai Nguyen avatar Manny Sanchez avatar Gautham Sajith avatar Ricardo L. Stephen avatar Janelle Hinds avatar Alec Heifetz avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.