如何以编程方式创建Gmail过滤器?

时间:2014-03-09 23:51:32

标签: javascript google-chrome-extension gmail

我想在Chrome扩展程序中以编程方式为标准Gmail用户创建Gmail过滤器(阅读非Google App)。目前,感谢这两个(过时的)资源:

  1. Grexit Filters API
  2. Gmail Filter Assistant, Userscript
  3. 我设法开发了一个早期原型,能够创建一个过滤器,自动存档(“cf2_ar = true”)在某个电子邮件地址(“cf1_to =”)收到的电子邮件。但是,似乎Gmail使用的任何其他“cf2”参数都不再有效。例如,应用带有参数“cf2_cat =”或“cf2_sel =”的标签不会做任何事情。

    我知道Gmail的代码在应用程序或扩展程序开发方面不是非常友好和开放但如果您有些人对Gmail用于创建过滤器的当前参数有任何想法,建议或更新,我将不胜感激,特别是用于将标签应用于消息的那个。

    script.js(DOM结束)

    // Inject API into Gmail DOM
    var s = document.createElement('script');
    s.src = chrome.runtime.getURL('js/lib/api.js');
    (document.head||document.documentElement).appendChild(s);
    s.onload = function() {
        s.parentNode.removeChild(s);
    };
    
    document.addEventListener('Demo_connectExtension', function(e) {
    
    if(e.detail) {
    
       // Gmail GLOBALS : DATA
        DATA = e.detail;
        user_data[0] = DATA[9]; // Id (ik)
        user_data[1] = DATA[10]; // Email
        user_data[2] = DATA[17][9][8]; // Locale
        user_data[3] = DATA[7]; // Gmail inbox
    
        var emailarr = user_data[1].split('@');
        user_data[4] = emailarr[0] + '+do@' + emailarr[1]; // email for filter
    
    
        var regex_cookie = new RegExp("GMAIL_AT=(.+?);");
    
        if (typeof document.cookie !== 'undefined') {
    
                // Get cookie
            var gmcookie = document.cookie.match(regex_cookie)[1];
            console.log('cookie:' + gmcookie);
    
    
            var gmail_filter_url =  'https://mail.google.com' + user_data[3] + 
                                    '/?ui=2&ik=' + user_data[0] +
                                    '&at=' + gmcookie +
                                    '&view=up&act=cf&pcd=1&mb=0&rt=c';
    
            var postdata = 'search=cf&cf1_to=' +
                            encodeURIComponent(user_data[4]) +
                            '&cf2_ar=true';
    
            $.post(gmail_filter_url, postdata, function(gmail_response){
                console.log(gmail_response);
                });
        }
    
          // [...]
    

    api.js(注入Gmail)

    'use strict';
    
    var GLOBALS;
    
    setTimeout(function() {
        /* Send Gmail Data to my extension */
        document.dispatchEvent(
            new CustomEvent('Demo_connectExtension', {
                detail: GLOBALS
            }));
    }, 1);
    

1 个答案:

答案 0 :(得分:1)

实际上,cf2_sel参数对我有用。我有一些类似的问题,在this question and answer中描述。

我的代码使用Grexit过滤器项目并解决了一个示例用例:

"当电子邮件内容中存在关键字时,添加标签,存档并设置此关键字的过滤器"

我成功测试了它,在查看Grexit代码时,' labelas'行动设定上述" cf2_sel"参数。

我的示例项目可以找到here,并为您提供快速测试和验证的方法,如果这对您有用。