Skip to content

Instantly share code, notes, and snippets.

@aksswami
Created May 4, 2017 11:43
Show Gist options
  • Save aksswami/9058c6f59c2dbd143a55c3d06f1f12bf to your computer and use it in GitHub Desktop.
Save aksswami/9058c6f59c2dbd143a55c3d06f1f12bf to your computer and use it in GitHub Desktop.
This Google App script parse gmail messages with specific label and put them a spreadsheet in your drive. I am using Gmail filter to put label to these message and remove this label after parsing to only parse new message on every turn.
function searchMessageWithLabel() {
var labelName = "My Label";
var response = GmailApp.search("label:" + labelName);
var label = GmailApp.getUserLabelByName(labelName);
if (response.length == 0) {
Logger.log("No messages available.");
} else {
Logger.log("Messages");
for(var i = 0; i < response.length; i++) {
var messages = response[i].getMessages();
var firstMessage = messages[0];
Logger.log("%s - %s", i, firstMessage.getFrom());
sendDataToSpreadSheet(firstMessage.getFrom(), firstMessage.getDate(), firstMessage.getSubject(), firstMessage.getPlainBody());
response[i].removeLabel(label).refresh();
}
}
}
function sendDataToSpreadSheet(from, date, subject, message) {
var spreadSheetName = "My Sheet"
var sheet
var files = DriveApp.getFilesByName(spreadSheetName);
if (files.hasNext()) {
var spreadsheets = SpreadsheetApp.open(files.next());
sheet = spreadsheets.getSheets()[0];
} else {
sheet = SpreadsheetApp.create(spreadSheetName);
}
sheet.appendRow([from, date, subject, message]);
SpreadsheetApp.flush();
}
@aksswami
Copy link
Author

aksswami commented May 4, 2017

<?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:apps='http://schemas.google.com/apps/2006'>
	<title>Mail Filters</title>
	<id>tag:mail.google.com,2008:filters:1493894907273</id>
	<updated>2017-05-04T10:49:30Z</updated>
	<author>
		<name>Amit Kumar Swami</name>
		<email>amit@abc.com</email>
	</author>
	<entry>
		<category term='filter'></category>
		<title>Mail Filter</title>
		<id>tag:mail.google.com,2008:filter:1493894907273</id>
		<updated>2017-05-04T10:49:30Z</updated>
		<content></content>
		<apps:property name='from' value='*@abc.com'/>
		<apps:property name='to' value='*@abc.com'/>
		<apps:property name='hasTheWord' value='wfh OR leave OR WFH/Leave OR Leave OR WFH'/>
		<apps:property name='label' value='WFH'/>
		<apps:property name='shouldStar' value='false'/>
		<apps:property name='sizeOperator' value='s_sl'/>
		<apps:property name='sizeUnit' value='s_smb'/>
	</entry>
</feed>

Filter for gmail to put labels to specific messages.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment