So I wouldn't waste time explaining the details of the scripting environment since there are some very good documentation and tutorials already. But I will explain how I started using this feature.
The Backgroound
We are running a website with the usual email feedback forms. Unfortunately because of the way the email system and the website's domain name is set up I cannot automate sending the emails directly to the corporate email addresses. I suspect that an experienced system administrator may be able to sort out the details quite easily but that is not me. So instead I send all feedback to a Gmail account from where it is then distributed to the appropriate addresses. Up to now the distribution was done manually. Wouldn't it be nice, I say to myself frequently, if I could write a script that simply forwarded these messages on automatically?The Solution
I started by creating a new script in Google Drive.Then I created a function to search the inbox and parse the emails and forward the relevant ones. The thing is, the email address of the department in the organization is actaully in the body of the email. This was originally done just as a summary of the entire transaction will be recorded in the email itself. So the function has to parse the body for the email address.
function forwardWebsiteMail(){
var address = "The address of emails from the website";
var d = new Date(); //todays date
var msg = "Starting send function at: " + d.toLocaleTimeString();
if(GmailApp.getInboxUnreadCount() > 0){ //are there any unread messages?
var threads = GmailApp.search('is:unread from:(address)'); //search for all unread messages from the website
var msgcount = 0;
var threadcount = threads.length;
for(var i = 0;i < threads.length; i++ ){ //loop through the threads
var messages = threads[i].getMessages();
for(var j = 0; j < messages.length;j++){ //loop through messages in this thread
var body = messages[j].getBody(); //parse the body of the mail.
var p = body.indexOf("@");
var found = false;
var n = p-1;
while(!found){ //find the start of the address
if(body.charAt(n) == " "){
found = true;
}else{
n = n - 1;
}
}
found = false;
var m = p + 1;
while(!found){ //find the end of the address
if(body.charAt(m) == "<" ){
found = true;
}else{
m = m + 1;
}
}
var faddress = body.substring(n + 1, m); //now get the address
messages[j].forward(faddress, {noReply:true}); //forward
messages[j].markRead(); //mark the message as read
msgcount = msgcount + 1; //keep track of the total number of messages forwarded
}
var label = GmailApp.getUserLabelByName("Work/AutoSent");//add a special label to the thread
threads[i].addLabel(label);
}
msg = msg + "\n" + msgcount + " messages sent";
msg = msg + "\nFrom " + threadcount + " threads";
}else{
msg = msg + "\nNo Unread Messages";
}
//finally notify myself that the script ran
GmailApp.sendEmail("my email address", "Auto Email Script Report " + d.toLocaleTimeString(), msg);
}
You can see from the above function that I am using the GmailApp object to interact with Gmail, the GmailThread and GmailMessage objects to interact with the Threads and Messages respectively.
Automating the Script
Finally I need a way to run this script without interaction from me. There are two possibilities: Time Driven triggers or Simple triggers. Simple Triggers respond to events such as onOpen and Time Driven Triggers can be scheduled to run at periodic intervals.The Script environment has an option to manage triggers.
It is then a simple matter to set an interval for your function to run. I am runnimng my function once every hour.