Javascript 谷歌脚本起草回复邮件的主题关键字和输入数据从谷歌表
我是谷歌应用程序脚本的新手,所以我正在寻找一些建议。有多个部分,我做了一些,但我被其他部分卡住了。任何帮助都将不胜感激 我正在尝试制作一个脚本:Javascript 谷歌脚本起草回复邮件的主题关键字和输入数据从谷歌表,javascript,google-apps-script,google-sheets,automation,gmail,Javascript,Google Apps Script,Google Sheets,Automation,Gmail,我是谷歌应用程序脚本的新手,所以我正在寻找一些建议。有多个部分,我做了一些,但我被其他部分卡住了。任何帮助都将不胜感激 我正在尝试制作一个脚本: 起草对包含特定关键字(在正文或主题行中)的电子邮件的回复 我还希望它包括一个从谷歌表单文件输入的数据模板 如果在修改图纸时,可以在不复制的情况下更新草稿,则更可取 我还计划在第二行中包含一行与主题列相对应的值(第一行),但我还没有找到它 有关Google表单的一些详细信息: 每行对应一个不同的人和电子邮件地址,定期给我发电子邮件 前三栏是关于我在草
- 每行对应一个不同的人和电子邮件地址,定期给我发电子邮件李>
- 前三栏是关于我在草稿正文中包含的人的详细信息
- 之后的每一列表示我希望在发送给我的电子邮件主题中找到的不同字符串或关键字李>
- 下面的行包含两个有图案的码字,在一个单元格中用空格分隔,我希望能够从中进行选择。例如:
- 3个字母,可以包含字母m、g、r的排列(例如:mmg、rgm、rgg、gmg)
- 和0-3个字母,只有p(对于ex:p、pp、ppp或空白)
到目前为止,我所拥有的:
- 我能够在指定的筛选器内起草电子邮件回复。但是,我只将其设置为回复此人最近的消息。我希望能够通过过滤器进行排序,以便在主题行中包含关键字的特定电子邮件在列中循环时进行排序
- 我可以将表单中的静态字符串输入到我的电子邮件正文中,但我仍然无法使用有图案的码字
- 在早期版本中,我可以循环浏览多行,但现在不行了。我以后再看一遍
function draftEmail() {
var sheet = SpreadsheetApp.getActiveSheet(); // Use data from the active sheet
var startRow = 1; // First row of data to process
var numRows = sheet.getLastRow() - 1; // Number of rows to process
var lastColumn = sheet.getLastColumn(); // Last column
var dataRange = sheet.getRange(startRow, 1, numRows, lastColumn) // Fetch the data range of the active sheet
var data = dataRange.getValues(); // Fetch values for each row in the range
// Work through each row in the spreadsheet
for (var i = 2; i < data.length; ++i) {
var row = data[i];
// Assign each row a variable
var grader = row[0]; // Col A: Grader's name
var firstName = row[1]; // Col B: Student's first name
var studentEmail = row[2]; // Col C: Student's email
var grade = row[3].split(' '); // Col D: Grade
var pgrade = grade[1];
var hgrade = grade[0];
for (var n = 1; n < data.length; ++n) {
var srow = data[n];
var subjectCol = srow[3];
var threads = GmailApp.getUserLabelByName('testLabel').getThreads();
for (i=0; i < threads.length; i++)
{
var thread = threads[i];
var messages = thread.getMessages(); // get all messages in thread i
var lastmsg = messages.length - 1; // get last message in thread i
var emailTo = WebSafe(messages[lastmsg].getTo()); // get only email id from To field of last message
var emailFrom = WebSafe(messages[lastmsg].getFrom()); // get only email id from FROM field of last message
var emailCC = WebSafe(messages[lastmsg].getCc()); // get only email id from CC field of last message
// form a new CC header for draft email
if (emailTo == "")
{
var emailCcHdr = emailCC.toString();
} else
{
if (emailCC == "")
{
var emailCcHdr = emailTo.toString();
} else
{
var emailCcHdr = emailTo.toString() + "," + emailCC.toString();
}
}
var subject = messages[lastmsg].getSubject().replace(/([\[\(] *)?(RE|FWD?) *([-:;)\]][ :;\])-]*|$)|\]+ *$/igm,"");
// the above line remove REs and FWDs etc from subject line
var emailmsg = messages[lastmsg].getBody(); // get html content of last message
var emaildate = messages[lastmsg].getDate(); // get DATE field of last message
var attachments = messages[lastmsg].getAttachments(); // get all attachments of last message
var edate = Utilities.formatDate(emaildate, "IST", "EEE, MMM d, yyyy"); // get date component from emaildate
var etime = Utilities.formatDate(emaildate, "IST", "h:mm a"); // get time component from emaildate
if (emailFrom.length == 0)
{
// if emailFrom is empty, it probably means that you may have written the last message in the thread. Hence 'you'.
var emailheader = '<html><body>' +
'On' + ' ' +
edate + ' ' +
'at' + ' ' +
etime + ',' + ' ' + 'you' + ' ' + 'wrote:' + '</body></html>';
} else
{
var emailheader = '<html><body>' +
'On' + ' ' +
edate + ' ' +
'at' + ' ' +
etime + ',' + ' ' + emailFrom + ' ' + 'wrote:' + '</body></html>';
}
var emailsig = '<html>' +
'<div>your email signature,</div>' +
'</html>'; // your email signature i.e. common for all emails.
// Build the email message
var emailBody = '<p>Hi ' + firstName + ',<p>';
emailBody += '<p>For ' + subjectCol + ', you will be graded on #1, 2, and 3: <p>';
emailBody += '<p>Participation: ' + pgrade + '</p>';
emailBody += '<p>HW grade: ' + hgrade + '</p>';
emailBody += '<p>If you have any questions, you can email me at ' + grader + '@email.com.<p>';
emailBody += '<p>- ' + grader;
var draftmsg = emailBody + '<br>' + emailsig + '<br>' + emailheader + '<br>' + emailmsg + '\n'; // message content of draft
// Create the email draft
messages[lastmsg].createDraftReply(
" ", // Body (plain text)
{
htmlBody: emailBody // Options: Body (HTML)
}
);
}
}
}
function WebSafe(fullstring)
{
var splitString = fullstring.split(",");
var finalarray = [];
for (u=0; u < splitString.length; u++)
{
var start_pos = splitString[u].indexOf("<") + 1;
var end_pos = splitString[u].indexOf(">",start_pos);
if (!(splitString[u].indexOf("<") === -1 && splitString[u].indexOf(">",start_pos) === -1)) // if < and > do exist in string
{
finalarray.push(splitString[u].substring(start_pos, end_pos));
} else if (!(splitString[u].indexOf("@") === -1))
{
finalarray.push(splitString[u]);
}
}
var index = finalarray.indexOf(grader + "@email.com"); // use your email id. if the array contains your email id, it is removed.
if (index > -1) {finalarray.splice(index, 1);}
return finalarray
}
}
函数draftEmail(){
var sheet=SpreadsheetApp.getActiveSheet();//使用活动工作表中的数据
var startRow=1;//要处理的第一行数据
var numRows=sheet.getLastRow()-1;//要处理的行数
var lastColumn=sheet.getLastColumn();//最后一列
var dataRange=sheet.getRange(startRow,1,numRows,lastColumn)//获取活动工作表的数据范围
var data=dataRange.getValues();//获取范围中每一行的值
//完成电子表格中的每一行
对于(变量i=2;i