定制 mlocati/tbfilters2gmail 二次开发

按需修改功能、优化性能、对接业务系统,提供一站式技术支持

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

mlocati/tbfilters2gmail

Composer 安装命令:

composer require mlocati/tbfilters2gmail

包简介

A PHP library that allows you to parse Thunderbird rule files (msgFilterRules.dat) and easily export them to Google Gmail filters

README 文档

README

This library helps you copying Thunderbird filters to Gmail.

Introduction

Thunderbird saves email filters in a file named msgFilterRules.dat. This library can read this file, and create automatically the required folders and filters in a Gmail account.

Requirements

Locate the msgFilterRules.dat file

You need to know where Thunderbird saves the msgFilterRules.dat file. In order to do that, open Thunderbird and:

  1. show the menu (use the ALT-F keys)
  2. under the Tools menu, choose Account Settings
  3. in the left list, choose the Server Settings item under the account name
  4. in the right pane, you'll see the Message Storage section: the folder containing the file msgFilterRules.dat should be the one specified in the Local Directory field

Create a Gmail Service account

You need a Gmail service account in order to use this library. Here's the complete list of steps required to correctly create and configure it:

  1. create a Google project
    1. go to the Google Cloud Platform dashboard page
    2. create a new project
  2. enable the Gmail API
    1. go to the Google Cloud Platform dashboard page
    2. from the menu, choose APIs & ServicesLibrary
    3. search for Gmail API and enable them for the project created above
  3. create a Service Account
    1. go to the Google Cloud Platform dashboard page
    2. from the menu, choose IAM & AdminService Accounts
    3. click the + Create service account button
      1. in the Step 1, enter any name/description you like
      2. in the Step 2, choose the Owner Role (Full access to all resources.)
      3. in the Step 3, you can leave the default (empty) values
    4. in the Service Account list, choose the Create key action for the newly created service account
      1. download the key in JSON format
      2. save the .json file in a secure location
    5. in the Service Account list, choose the Edit action for the newly created service account
    6. in the Service account status section, click the Show domain-wide delegation
    7. check the Enable G Suite Domain-wide Delegation option
    8. save
  4. grant the required OAuth scopes
    1. go to the Google Admin page
    2. from the menu, choose SecurityAPI Controls
    3. in the Domain wide delegation section, click the Manage domain wide delegation link
    4. add a new API client
      1. in the Client ID field enter the number associated to the client_id key in the .json file you downloaded above
      2. you have to specify these OAuth scopes (here you can find all the available scopes):
        • https://www.googleapis.com/auth/gmail.labels (required to manage the folders of the Gmail accounts)
        • https://www.googleapis.com/auth/gmail.settings.basic (required to manage the filters of the Gmail accounts)

Sample usage

Let's assume that:

  • you downloaded the JSON key for the service account to path/to/key.json
  • the Thunderbird filters files is available at path/to/msgFilterRules.dat
  • the email address of the Gmail account is me@my.domain

With the above data, you can copy the Thunderbird filters to Gmail with a few lines of code like these:

// Parse the Thunderbird filters
$filters = \TBF2GM\MsgFilterRulesDatParser::fromFile('path/to/key.json')->parse();

// Initialize the Google API Client
$client = new \Google\Client();
$client->setAuthConfig('path/to/key.json');
$client->setScopes([\Google_Service_Gmail::GMAIL_LABELS, \Google_Service_Gmail::GMAIL_SETTINGS_BASIC]);
$client->setSubject('me@my.domain');

// Create the Gmail filters
$writer = new \TBF2GM\Gmail\FilterWriter($client);
$problems = $writer->ensureFilters($filters);

// Let's print any error that may occur
foreach ($problems as $problemIndex => $problem) {
    echo 'Problem ', $problemIndex + 1, (string) $problem, "\n";
}

Ad this point, you should have the Thunderbird filters available in Gmail.

Known issues

  • It seems it's not possible to create Gmail filters with rules like begins with, ends with, is exactly, ... Gmail filters always search for parts of the text. So, for example, a Tunderbird criteria like If the subject starts with "Some text" will generate a Gmail filter like If the subject contains "Some text".
  • The "Stop Filter Execution" Tunderbird action is ignored (it seems there's no way to implement such feature in Gmail filters)
  • It seems it's not possible to create Gmail filters with header-specific criterias
  • Not every criteria/action has been implemented in this library. We implemented only the ones we actually needed.

How to delete all the Gmail filters and/or folders

If you want to test this library, you may need to delete all the existing Gmail filters and/or folders. You can do that with this code (we assume that the $client variable is initialized as described in the Sample usage section above)

$service = new \Google_Service_Gmail($client);

// Delete all the existing Gmail filters
foreach ($service->users_settings_filters->listUsersSettingsFilters('me')->getFilter() as $filter) {
    $service->users_settings_filters->delete('me', $filter->getId());
}

// Delete all the existing Gmail folders
foreach ($service->users_labels->listUsersLabels('me') as $label) {
    if ($label->getType() === 'user') {
        $service->users_labels->delete('me', $label->getId());
    }
}

统计信息

  • 总下载量: 13
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 6
  • 点击次数: 1
  • 依赖项目数: 0
  • 推荐数: 0

GitHub 信息

  • Stars: 6
  • Watchers: 2
  • Forks: 1
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2021-02-09

承接程序开发

PHP开发

VUE

Vue开发

前端开发

小程序开发

公众号开发

系统定制

数据库设计

云部署

网站建设

安全加固