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:
- show the menu (use the
ALT-Fkeys) - under the
Toolsmenu, chooseAccount Settings - in the left list, choose the
Server Settingsitem under the account name - in the right pane, you'll see the
Message Storagesection: the folder containing the filemsgFilterRules.datshould be the one specified in theLocal Directoryfield
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:
- create a Google project
- go to the Google Cloud Platform dashboard page
- create a new project
- enable the Gmail API
- go to the Google Cloud Platform dashboard page
- from the menu, choose APIs & Services → Library
- search for Gmail API and enable them for the project created above
- create a Service Account
- go to the Google Cloud Platform dashboard page
- from the menu, choose IAM & Admin → Service Accounts
- click the + Create service account button
- in the Step 1, enter any name/description you like
- in the Step 2, choose the Owner Role (Full access to all resources.)
- in the Step 3, you can leave the default (empty) values
- in the Service Account list, choose the Create key action for the newly created service account
- download the key in JSON format
- save the
.jsonfile in a secure location
- in the Service Account list, choose the Edit action for the newly created service account
- in the Service account status section, click the Show domain-wide delegation
- check the Enable G Suite Domain-wide Delegation option
- save
- grant the required OAuth scopes
- go to the Google Admin page
- from the menu, choose Security → API Controls
- in the Domain wide delegation section, click the Manage domain wide delegation link
- add a new API client
- in the Client ID field enter the number associated to the
client_idkey in the.jsonfile you downloaded above - 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)
- in the Client ID field enter the number associated to the
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 likeIf the subject starts with "Some text"will generate a Gmail filter likeIf 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
其他信息
- 授权协议: MIT
- 更新时间: 2021-02-09