如何通过Google Sheet脚本统计Gmail发件人及邮件大小?
解决Gmail邮件大小统计的问题
嘿,我看到你在统计发件人邮件信息时卡在了获取邮件大小这一步,咱们马上搞定它!
首先,你代码里的第一个小问题是方法名大小写错误:GmailApp的消息对象里获取大小的方法是驼峰式的getSizeEstimate(),而不是你写的getsizeEstimate()——大小写不对的话,脚本会找不到这个方法,自然拿不到大小值啦。
不过还有个逻辑上的小优化:你现在的代码会把每一封邮件都单独加入数组,同一个发件人会出现多次,最后只是排序但没有合并计数和总大小。咱们可以改用一个对象来统计,这样能直接累加同一发件人的邮件数量和总大小,更符合统计需求。
给你修正并优化后的完整脚本:
function sender_list() { var inbox_threads = GmailApp.getInboxThreads(); // 用对象来存储发件人对应的统计数据,避免重复条目 var senderStats = {}; // 先测试前10个线程,你之后可以改回inbox_threads.length for (var i = 0; i < 10; i++) { var messages = inbox_threads[i].getMessages(); for (var x = 0; x < messages.length; x++) { var msg = messages[x]; var sender = msg.getFrom(); // 修正大小写:getSizeEstimate() var size = msg.getSizeEstimate(); // 如果发件人已经在统计对象里,就累加计数和大小 if (senderStats[sender]) { senderStats[sender].count += 1; senderStats[sender].totalSize += size; } else { // 第一次遇到这个发件人,初始化数据 senderStats[sender] = { count: 1, totalSize: size }; } } } // 把统计对象转换成适合写入表格的数组格式 var sender_array = []; for (var sender in senderStats) { // 可以把字节转成KB(除以1024),或者MB(除以1024*1024),看你需求 var sizeInKB = (senderStats[sender].totalSize / 1024).toFixed(2); sender_array.push([sender, senderStats[sender].count, sizeInKB + " KB"]); } var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var sheet = spreadsheet.getSheetByName('sheet1'); sheet.clear(); sheet.appendRow(['Email Address', 'Count', 'Total Size']); // 按邮件数量降序排序(可选,也可以按大小排序) sender_array.sort(function(a, b) { return b[1] - a[1]; }); sheet.getRange(sheet.getLastRow()+1, 1, sender_array.length, 3).setValues(sender_array); }
关键修改点说明:
- 修正了
getSizeEstimate()的大小写问题,这是你拿不到大小值的核心原因 - 用
senderStats对象替代数组直接存储,自动合并同一发件人的数据,避免重复条目 - 增加了字节到KB的转换(可以根据需求改成MB),让大小数据更易读
- 加入了按邮件数量降序排序的逻辑,方便查看发件人排名
如果之后需要统计全部收件箱线程,只要把循环条件改回i < inbox_threads.length就行啦。
内容的提问来源于stack exchange,提问作者101010
相关产品推荐
相关产品推荐

