Files
piratepoet/packages/php/email-editor

MailPoet Email Editor

This folder contains the code for the MailPoet Email Editor PHP Package. We aim to extract the engine as an independent library, so it can be used in other projects. As we are still in an exploration phase, we keep it together with the MailPoet codebase.

You can locate the JS package here packages/js/email-editor

Workflow Commands

We use composer run scripts to run the commands. You can run them using composer run <command>. If you don't have composer installed globally, you can use the composer.phar file in ../mailpoet/tools/vendor.

composer run unit-test                             # runs all the unit tests
composer run unit-test -- [path_to_tests]          # runs a single unit test or a directory of tests
composer run integration-test                      # runs all the integrations tests
composer run integration-test -- [path_to_tests]   # run a single integration test or a directory of tests
composer code-style                                # checks the code style

Example:

# To run test cases defined in tests/integration/Engine/Theme_Controller_Test.php run
composer run integration-test -- tests/integration/Engine/Theme_Controller_Test.php

Development

Both PHP and JS codes are divided into engine and integrations subdirectories. Engine consist of code for the editor core and integrations are for extending the functionality. Anything MailPoet specific should be in the mailpoet/lib/EmailEditor/Integrations folder.

Please avoid using MailPoet-specific services and modules in the Email editor package.

Renderer

Content Renderer

  • Responsible for rendering saved template + email content to HTML or email clients
  • Flow is Preprocessors > BlocksRenderer > Postprocessors

Root Renderer.php

  • Takes the rendered content html and places it into email HTML template template-canvas.php (We have too many items we call “template” I know 🙁)

Integrations

Please locate integrations here

Known rendering issues

  • In some (not all) Outlook versions the width of columns is not respected. The columns will be rendered with the full width.
  • The editor may not start if the URL starts with wp-admin/post-new.php?post_type=mailpoet_email.
  • Most of the email editor logic heavily depends on the mailpoet_email post-type. This is a known issue and we are working to fix it.
  • We use mailpoet_data in some section of the codebase. This will be updated.
  • Native email editor implementation for preview_url
  • Fix the use of MailPoet vendor packages in the Email editor. We currently use Emogrifier and Html2Text.
  • Fix the Send button (button to send email) or redirect it elsewhere. It is currently pointing to the mailpoet-newsletter page.
  • We currently support post editing context (a post has to be created before we can use the editor). We need to add support for creation context.

Actions and Filters

These actions and filters are currently Work-in-progress. We may add, update and delete any of them.

Please use with caution.

Actions

Name Argument Description
mailpoet_email_editor_initialized null Called when the Email Editor is initialized
mailpoet_blocks_renderer_initialized BlocksRegistry Called when the block content renderer is initialized. You may use this to add a new BlockRenderer

Filters

Name Argument Return Description
mailpoet_email_editor_post_types Array $postTypes Array EmailPostType Applied to the list of post types used by the getPostTypes method
mailpoet_email_editor_theme_json WP_Theme_JSON $coreThemeData WP_Theme_JSON $themeJson Applied to the theme json data. This theme json data is created from the merging of the WP_Theme_JSON_Resolver::get_core_data and MailPoet owns theme.json file
mailpoet_email_renderer_styles string $templateStyles, WP_Post $post string $templateStyles Applied to the email editor template styles.
mailpoet_blocks_renderer_parsed_blocks WP_Block_Parser_Block[] $output WP_Block_Parser_Block[] $output Applied to the result of parsed blocks created by the BlocksParser.
mailpoet_email_content_renderer_styles string $contentStyles, WP_Post $post string $contentStyles Applied to the inline content styles prior to use by the CSS Inliner.
mailpoet_is_email_editor_page boolean $isEditorPage boolean Check current page is the email editor page
mailpoet_email_editor_send_preview_email Array $postData boolean Result of processing. Was email sent successfully? Allows override of the send preview mail function. Folks may choose to use custom implementation

FAQ

  1. How can I activate the new email editor?
    • You need to active it as an experimental feature on the URL {your-website}/wp-admin/admin.php?page=mailpoet-experimental
    • After that, you can see a dropdown button when you want to create a new email.
  2. Are emails from the old editor compatible?
    • No. Unfortunately, email editors are not compatible at this moment, and there is no tool which would allow you to migrate old emails yet.
  3. Which WP versions are supported?
    • The new email editor supports only the latest WP version. The last supported version was 6.6.
  4. Can I use the latest Gutenberg version?
    • You can use the latest version by installing the Gutenberg plugin, but there is a high chance that the editor will not work properly.