Gmail 到 Google 传播 Sheet(仅日期、电子邮件和主题)
Gmail to Google Spread Sheet (only date, email and subject)
我拼凑的代码确实有效,但它从我的电子邮件中导入了错误的内容。我只想将发送日期、发件人电子邮件地址和主题导入 google sheet.
有人可以帮忙吗?
function onOpen() {
const spreadsheet = SpreadsheetApp.getActive();
let menuItems = [
{name: 'Gather emails', functionName: 'gather'},
];
spreadsheet.addMenu('SP LEGALS', menuItems);
}
function gather() {
let messages = getGmail();
let curSheet = SpreadsheetApp.getActive();
messages.forEach(message => {curSheet.appendRow(parseEmail(message))});
}
function getGmail() {
const query = "to:legals@salisburypost.com";
let threads = GmailApp.search(query,0,10);
let messages = [];
threads.forEach(thread => {
messages.push(thread.getMessages()[0].getPlainBody());
label.addToThread(thread);
});
return messages;
}
function parseEmail(message){
let parsed = message.replace(/,/g,'')
.replace(/\n*.+:/g,',')
.replace(/^,/,'')
.replace(/\n/g,'')
.split(',');
let result = [0,1,2,3,4,6].map(index => parsed[index]);
return result;
}
我相信你的目标如下。
- 您想从搜索到的线程中的第一条消息中检索 "the date, sender and subject" 到 Google Spreadsheet.
的活动 sheet
为此,这个答案怎么样?
修改点:
- 在这种情况下,您可以使用 GmailApp 的内置方法检索 "the date, sender and subject"。
- 将值放入Spreadsheet,在循环中使用
appendRow
时,处理成本会变高。
- 您的脚本中似乎没有声明
label
。
当以上几点反映到你的脚本中,就变成了下面这样。
修改后的脚本:
在这次修改中,我修改了 gather()
和 getGmail()
以实现您的目标。
function gather() {
let messages = getGmail();
if (messages.length > 0) {
let curSheet = SpreadsheetApp.getActiveSheet();
curSheet.getRange(curSheet.getLastRow() + 1, 1, messages.length, messages[0].length).setValues(messages);
}
}
function getGmail() {
const query = "to:legals@salisburypost.com";
let threads = GmailApp.search(query,0,10);
let messages = [];
threads.forEach(thread => {
const m = thread.getMessages()[0];
messages.push([m.getDate(), m.getFrom(), m.getSubject()]);
// label.addToThread(thread);
});
return messages;
}
- 当没有使用
"to:legals@salisburypost.com"
检索线程时,不会将值放入 Spreadsheet。请注意这一点。
参考文献:
我拼凑的代码确实有效,但它从我的电子邮件中导入了错误的内容。我只想将发送日期、发件人电子邮件地址和主题导入 google sheet.
有人可以帮忙吗?
function onOpen() {
const spreadsheet = SpreadsheetApp.getActive();
let menuItems = [
{name: 'Gather emails', functionName: 'gather'},
];
spreadsheet.addMenu('SP LEGALS', menuItems);
}
function gather() {
let messages = getGmail();
let curSheet = SpreadsheetApp.getActive();
messages.forEach(message => {curSheet.appendRow(parseEmail(message))});
}
function getGmail() {
const query = "to:legals@salisburypost.com";
let threads = GmailApp.search(query,0,10);
let messages = [];
threads.forEach(thread => {
messages.push(thread.getMessages()[0].getPlainBody());
label.addToThread(thread);
});
return messages;
}
function parseEmail(message){
let parsed = message.replace(/,/g,'')
.replace(/\n*.+:/g,',')
.replace(/^,/,'')
.replace(/\n/g,'')
.split(',');
let result = [0,1,2,3,4,6].map(index => parsed[index]);
return result;
}
我相信你的目标如下。
- 您想从搜索到的线程中的第一条消息中检索 "the date, sender and subject" 到 Google Spreadsheet. 的活动 sheet
为此,这个答案怎么样?
修改点:
- 在这种情况下,您可以使用 GmailApp 的内置方法检索 "the date, sender and subject"。
- 将值放入Spreadsheet,在循环中使用
appendRow
时,处理成本会变高。 - 您的脚本中似乎没有声明
label
。
当以上几点反映到你的脚本中,就变成了下面这样。
修改后的脚本:
在这次修改中,我修改了 gather()
和 getGmail()
以实现您的目标。
function gather() {
let messages = getGmail();
if (messages.length > 0) {
let curSheet = SpreadsheetApp.getActiveSheet();
curSheet.getRange(curSheet.getLastRow() + 1, 1, messages.length, messages[0].length).setValues(messages);
}
}
function getGmail() {
const query = "to:legals@salisburypost.com";
let threads = GmailApp.search(query,0,10);
let messages = [];
threads.forEach(thread => {
const m = thread.getMessages()[0];
messages.push([m.getDate(), m.getFrom(), m.getSubject()]);
// label.addToThread(thread);
});
return messages;
}
- 当没有使用
"to:legals@salisburypost.com"
检索线程时,不会将值放入 Spreadsheet。请注意这一点。