Hacking Gmail Book 09-10-2017, 08:37 PM
#1
![[Image: f28bf76702.png]](https://puu.sh/wUzbJ/f28bf76702.png)
Code:
Part I: Starting to Use Gmail 1
Chapter 1: Desktop Integration . . . . . . . . . . . . . . . . . . . . . . . . 3
New Mail Notification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
Mac OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Linux, etc. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
Redirecting mailto: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
Multiplatform/Mozilla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
OS X . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
GmailerXP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
And Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
Chapter 2: Integrating Your Existing Mail . . . . . . . . . . . . . . . . . . 11
Importing Your Mail into Gmail . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Gmail Loader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
Setting Up Pop Access Inside Gmail . . . . . . . . . . . . . . . . . . . . . . . . . 12
Setting Up Pop Within an Application . . . . . . . . . . . . . . . . . . . . . . . . 13
IMAP for Gmail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
And Now . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
Chapter 3: Gmail Power Tips. . . . . . . . . . . . . . . . . . . . . . . . . 15
Keyboard Shortcuts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
Plus Addressing and Filtering . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
Other Addressing Tips . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
Quickly Mark a Group of E-Mails . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Send Executables as Attachments . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
Advanced Searching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
And Now . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
02_59611x ftoc.qxp 11/28/05 11:05 PM Page xi
Part II: Getting Inside Gmail 27
Chapter 4: Skinning Gmail . . . . . . . . . . . . . . . . . . . . . . . . . . 29
Deconstructing Gmail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
The Top Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
The Navigation Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
The Activity Area . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
The Bottom Section . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
Applying a New Style . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Creating Gmail Lite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
Walking Through the Style Sheet . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
Removing Google�??s Advertising . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
And Now . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
Chapter 5: How Gmail Works . . . . . . . . . . . . . . . . . . . . . . . . 53
What the Devil Is Going On?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
Preloading the Interface. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
Introducing XMLHttpRequest . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
Using XMLHttpRequest Yourself . . . . . . . . . . . . . . . . . . . . . . . 55
Finding XMLHttpRequest within the Gmail code . . . . . . . . . . . . . . 61
Sniffing the Network Traffic. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Firing Up Tcpflow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62
Prodding Gmail to Hear It Squeak . . . . . . . . . . . . . . . . . . . . . . . . . . 67
Preparing to Watch the Gmail Boot Sequence . . . . . . . . . . . . . . . . . 67
Cleaning Up the Log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
Stepping Through the Gmail Boot Sequence . . . . . . . . . . . . . . . . . . . . . 68
Logging In . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
The First Cookie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
Loading the Inbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
Reading an Individual Mail . . . . . . . . . . . . . . . . . . . . . . . . . . . 81
And Now . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89
Chapter 6: Gmail and Greasemonkey . . . . . . . . . . . . . . . . . . . . 91
What Is Greasemonkey?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
The Userscripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
Displaying Bloglines Within Gmail . . . . . . . . . . . . . . . . . . . . . . 92
How It Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
Add a Delete Button. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
GmailSecure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
MailtoComposeInGmail . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
Other Userscripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Mark Read Button. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
Multiple Signatures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Hide Invites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
Random Signatures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
And Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
xii Contents
02_59611x ftoc.qxp 11/28/05 11:05 PM Page xii
Chapter 7: Gmail Libraries . . . . . . . . . . . . . . . . . . . . . . . . . 117
PHP �?? Gmailer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
Getting and Installing the Library. . . . . . . . . . . . . . . . . . . . . . . 118
How to Use It . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
Perl �?? Mail::Webmail::Gmail . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
Getting and Installing the Library. . . . . . . . . . . . . . . . . . . . . . . 127
Using the Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
Python �?? Libgmail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
Getting and Installing the Library. . . . . . . . . . . . . . . . . . . . . . . 131
How to Use It . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
Reading the First Message in the Inbox. . . . . . . . . . . . . . . . . . . . 134
Setting Yourselves Up for the Remaining Chapters . . . . . . . . . . . . . . . . . 135
And Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
Chapter 8: Checking for Mail . . . . . . . . . . . . . . . . . . . . . . . . 137
The Basics in Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
The Basics in PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
The Basics in Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140
Building on the Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
New Mail Count in RSS . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
New Mail Count to AOL Instant Messenger . . . . . . . . . . . . . . . . . 144
And Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
Chapter 9: Reading Mail . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Reading Mail with Perl. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151
Accessing All the Data of a Message . . . . . . . . . . . . . . . . . . . . . 152
Listing the Mail and Displaying a Chosen Message . . . . . . . . . . . . . 153
Dealing with Attachments. . . . . . . . . . . . . . . . . . . . . . . . . . . 155
Making an RSS Feed of Your Inbox . . . . . . . . . . . . . . . . . . . . . . 155
And Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
Chapter 10: Sending Mail. . . . . . . . . . . . . . . . . . . . . . . . . . 161
Sending Mail with Gmail SMTP . . . . . . . . . . . . . . . . . . . . . . . . . . 161
Sending Mail with Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
And Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
Part III: Conquering Gmail 167
Chapter 11: Dealing with Labels . . . . . . . . . . . . . . . . . . . . . . 169
Listing the Existing Labels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169
Setting New Labels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 173
Creating a New Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
Removing Labels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
And Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
Contents xiii
02_59611x ftoc.qxp 11/28/05 11:05 PM Page xiii
Chapter 12: Addressing Addresses . . . . . . . . . . . . . . . . . . . . . 177
The Contacts List . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
Importing Contacts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178
Showing Your Current Contacts . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
Exporting Contacts. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
And Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Chapter 13: Building an API from the HTML-Only Version of Gmail . . . 183
A First Look at the HTML Version . . . . . . . . . . . . . . . . . . . . . . . . . 183
Introducing Basic Scraping. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
HTML::TokeParser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 186
Parsing the Inbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
Retrieving the Individual Page. . . . . . . . . . . . . . . . . . . . . . . . . 192
Dealing with Threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 195
Dealing with Other Folders . . . . . . . . . . . . . . . . . . . . . . . . . . 195
And Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196
Chapter 14: Exporting Your Mail . . . . . . . . . . . . . . . . . . . . . . 197
Exporting as a Massive Text File . . . . . . . . . . . . . . . . . . . . . . . . . . . 197
Converting to Mbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
Appending to IMAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
And Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
Chapter 15: Using Gmail to . . . . . . . . . . . . . . . . . . . . . . . . . 203
Using Gmail as a To-Do List . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Using Filters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
Using gmtodo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205
Using Gmail to Find Information in RSS Feeds. . . . . . . . . . . . . . . . . . . 205
Using Gmail to Find Torrent Files . . . . . . . . . . . . . . . . . . . . . . 206
Using Gmail as a Notepad . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
Using Gmail as a Spam Filter . . . . . . . . . . . . . . . . . . . . . . . . . . . . 209
An Even Simpler Way of Doing It . . . . . . . . . . . . . . . . . . . . . . 210
Using Gmail as Storage for a Photo Gallery . . . . . . . . . . . . . . . . . . . . . 210
And Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
Chapter 16: Using GmailFS . . . . . . . . . . . . . . . . . . . . . . . . . 213
The Underlying Idea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Installing GmailFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
The Correct Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213
Installing FUSE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Installing Libgmail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Installing GmailFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
Using GmailFS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 216
Mounting GmailFS from the Command Line . . . . . . . . . . . . . . . . 216
Mounting GmailFS from fstab . . . . . . . . . . . . . . . . . . . . . . . . 217
Passing Commands to the File System . . . . . . . . . . . . . . . . . . . . 217
xiv Contents
02_59611x ftoc.qxp 11/28/05 11:05 PM Page xiv
How GmailFS Works . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
What Makes Up a File? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
Representing All of This in E-Mail . . . . . . . . . . . . . . . . . . . . . . 220
The Actual Data in Action . . . . . . . . . . . . . . . . . . . . . . . . . . 220
And Now . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
Appendix: Long Code Listings . . . . . . . . . . . . . . . . . . . . . . . 223
Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 275![[Image: Vs4P58c.png]](https://i.imgur.com/Vs4P58c.png)





![[+]](https://sinister.li/images/modern/collapse_collapsed.png)