Google Apps脚本 - 使用相同主题行从Gmail正文文本中解析数据

时间:2017-05-23 23:48:31

标签: google-apps-script

我正在使用此Google Apps脚本从gmail邮件的正文中提取和解析数据字段。我修改了脚本,使其适用于我的电子邮件中的字段。但是,我发现只有在电子邮件具有不同的主题行时它才有效。例如,如果我有五封电子邮件都有不同的主题行,则该脚本将在Google电子表格中创建5行,每封电子邮件对应一封电子邮件。但如果我有5封电子邮件都有相同的主题行,我只会在收件箱中找到最早的电子邮件行。有谁知道如何修改这个脚本,以便所有电子邮件的主题行可以相同?谢谢!

/* Based on https://gist.github.com/Ferrari/9678772 */

function parseEmailMessages(start) {

start = start || 0;

var threads = GmailApp.getInboxThreads(start, 100);
var sheet = SpreadsheetApp.getActiveSheet();

for (var i = 0; i < threads.length; i++) {

// Get the first email message of a threads
var tmp,
  message = threads[i].getMessages()[0],
  subject = message.getSubject(),
  content = message.getPlainBody();

// Get the plain text body of the email message
// You may also use getRawContent() for parsing HTML

// Implement Parsing rules using regular expressions
if (content) {

  tmp = content.match(/Name:\s*([A-Za-z0-9.\s]+)(\r?\n)/);
  var username = (tmp && tmp[1]) ? tmp[1].trim() : 'No username';

  tmp = content.match(/Title:\s*([A-Za-z0-9.\s]+)(\r?\n)/);
  var title = (tmp && tmp[1]) ? tmp[1].trim() : 'No username';

  tmp = content.match(/Organization:\s*([A-Za-z0-9.\s]+)(\r?\n)/);
  var organization = (tmp && tmp[1]) ? tmp[1].trim() : 'No username';

  tmp = content.match(/City:\s*([A-Za-z0-9.\s]+)(\r?\n)/);
  var city = (tmp && tmp[1]) ? tmp[1].trim() : 'No username';

  tmp = content.match(/State:\s*([A-Za-z0-9.\s]+)(\r?\n)/);
  var state = (tmp && tmp[1]) ? tmp[1].trim() : 'No username';

  tmp = content.match(/country:\s*([A-Za-z0-9.\s]+)(\r?\n)/);
  var country = (tmp && tmp[1]) ? tmp[1].trim() : 'No username';

  tmp = content.match(/E-mail:\s*([\s\S]+)/);
  var email = (tmp && tmp[1]) ? tmp[1] : 'No comment';

  sheet.appendRow([username, title, organization, city, state, country, email]);

} // End if

  } // End for loop
}

1 个答案:

答案 0 :(得分:0)

这一行:message = threads[i].getMessages()[0]仅检索线程中的第一条(最旧的)消息,即线程数组的索引0。您希望迭代线程中的每条消息,因此您需要将整个线程检索到新数组中。简而言之,在getMessages()调用后丢失数组索引 试试这个逻辑:

threads = GmailApp.getInboxThreads(start, 100)
for (i = 0; i < threads.length; i++)
  messages = threads[i].getMessages()
  for (j = 0; j < thread.length; j++)
    subject = messages[j].getSubject()
    content = messages[j].getPlainBody()
    etc...