Mediterranean Gardening France

What's New? / Quoi de neuf ?

Join / Adhérer
Contact Us / Nous contacter

Plugin: Brevo – Resending bounced messages


When sending a broadcast message (or subscription renewal notice / reminder) it can happen that some recipients do not receive message for one reason or another. Brevo calls these ‘bounces’ and differentiates between ‘hard’ and ‘soft’ bounces. Hard bounces are those which fail immediately (e.g. the mailbox does not exist). Soft bounces are where the message was initially refused but the reason may only be temporary and the system will try again to deliver for up to 36 hours. Reasons include a mailbox which is full and where the message is blocked by an anti-spam checker.

The number of hard and soft bounces can be seen among the results of a sent message (Member App -> Broadcast message results). By the time the results appear, the 36 hour time limit will have expired and no more attempts to deliver the message will be made. The Member App can only show the number of bounces but more details can be found on the Brevo website and, if required, the message can be resent to those who missed out. This page describes how to do this.

Identifying the bounced recipients

Note the campaign subject and number from the summary page of the broadcast message results.

From the dashboard sidebar, log in to the Brevo website: Brevo -> Home -> Access to the list of all my contacts

Get the list of campaigns: Campaigns -> Email, find the campaign in question and click on ‘Report’.

Scroll down the report to ‘Sending Status’. This shows how many hard and soft bounces have occurred. Click on the number of hard or soft bounces as appropriate. This will open a new tab with a list of those members who were bounced. You can find the reason why a given member was bounced by clicking their name in the list. Inter alia, this will show the history of all the messages sent to the person concerned. Scroll down to the message in question (as the message was bounced, its status will be ‘Sent’, rather than ‘Delivered’ or ‘Opened’). Clicking ‘Show details’ will display the reason for the bounce.

Create a list of recipients to whom the message is to be resent

In the tab showing the list of bounced members, create a restricted list for resend by clicking ‘Save as segment’, giving the segment a name and clicking ‘Create’. By default, the saved segment will be placed in a folder called ‘My segments’.

Copy the campaign

As the original campaign has been sent, you will need to create a copy of it to send to the restricted list. In the tab with the list of campaigns, find the campaign in question and click ‘More -> Duplicate’. A popup box will ask you to confirm the duplication; do so. This will show a new list with just the duplicate campaign – which will have a name of [campaign-name] _copy.

Update the campaign title and the recipients

On the duplicated campaign, click ‘Edit’ to open a page on which you will make the changes necessary for the resend. If necessary, change the title of the campaign by clicking the pen icon, changing the text and clicking the tick mark. On this page, there are a number of options to change the campaign. Other than in exceptional circumstances, the only option to change is ‘Recipients’. Click ‘Add recipients’, open the ‘Send to’ dropdown box, click ‘Segments’, click ‘My segments’ and then select the segment where you saved the list of bounced members. Click ‘Save’.

Resending the message

Scroll to the top of the page and click ‘Schedule’. This opens a popup box with three options. Unless there is some reason not to send the message immediately, select the ‘Send now’ option and click ‘Send now’. The message will be sent after a short delay and you can check what happens to it as with any other message.

Final remarks

In the worst case, you may have to do the above four times: English/French, hard/soft bounces.

It is worthwhile checking the reasons for the bounce as it may be possible to prevent reoccurrences by asking the recipients to take some action.

In the event that a soft bounce occurred because the message was tagged as spam, there is not a lot that we can do other than resend; MGF messages are sent with proper credentials and we have no control over the behaviour of receiving email agents. Orange and Wanadoo (same company) are particularly sensitive about spam and, for one message, threw out 23 of the 27 messages sent to an address in their domain. The best that can be done is to encourage members using these domains to ‘white-hat’ messages from MGF by updating their security options. The Orange website has a page showing users how to do add to the their so-called ‘liste verte’.


Plugin: WP phpMyAdmin

phpMyAdmin is a free software tool written in PHP, intended to handle the administration of MySQL over the Web. phpMyAdmin supports a wide range of operations on MySQL and MariaDB. Frequently used operations (managing databases, tables, columns, relations, indexes, users, permissions, etc) can be performed via the user interface, while you still have the ability to directly execute any SQL statement. For more information, see the phpMyAdmin site.

Normally, access to phpMyAdmin is via the site’s hosting platform. This plugin allows a user to access it directly from the administrative dashboard. Click WP-phpMyAdmin in the dashboard sidebar and then ‘Enter local phpMyAdmin’. This will open the tool in a new tab.

Experience has shown that the tool is very useful for checking exactly what is in the WordPress database and for correcting errors caused by bugs.

It can also be used to modify the structure of database tables and transfer data to and from the database via, say, a CSV spreadsheet.

Note that, once open, the tool will die after a certain time if not used and has to be opened again.

phpMyAdmin is a powerful tool but must be used with care.


Plugin: WPForms


WPForms is a paid-for plugin for the creation and processing of forms. The basic plugin creates forms which are then incorporated into a page using a special Gutenberg block. When the forms are filled in and submitted, the plugin stores the information in an entry (actually records in a number of database tables) which can be retrieved as required. In addition, there are two supplementary plugins which are can be called when creating the form itself:

  • WPForms Form Pages: creates a complete page rather than a block (not used by MGF);
  • WPForms User Registration: in addition to the entry, creates a WordPress user record (used by MGF for the membership forms).

There is also a comprehensive API which is used to integrate processing of the forms with the Member App rather than using the WPForms entries.

WPForms is called by clicking ‘WPForms’ in the dashboard sidebar. This is a dropdown menu with 12 options. An abbreviated list of the most important options can also be found by clicking ‘WPForms’ in the admin bar at the top of the dashboard.

All FormsLists all current forms and provides options for action (edit, view entries, etc.).
Add NewCreates a new form.
EntriesLists all forms with statistics on use. When a form name is clicked, displays all entries (which can them be modified or deleted).
PaymentsAllows payments to be processed on a file. Would be useful if MGF initiates online payments for subscriptions and others.
Form TemplatesPreformatted templates for use in form creation. Not used.
SettingsVarious setting options – see foot of page.
ToolsVarious administrative tools – see foot of page.
AddonsLists all available addons to the basic plugin with the ability to install them as required.
AnalyticsInstallation of MonsterInsights which links WPForms to Google Analytics.
SMTPA mail sending option.
About Us Company information plus details of other products. Has a useful ‘Getting Started’ section.
CommunityUser support forums plus API documentation and tutorials.
WPForms Menu Options

Instructions on how to use WPForms is beyond the scope of this documentation. However, there is comprehensive documentation on the WPForms website (click About Us or Community). A good place to start is WPForms -> About Us -> Getting Started.

Use of WPForms in the MGF Site

In the MGF site WPForms is used for:

  • the two membership forms (‘Join’ and the ‘Add a member’ option of the adminstrative menu);
  • the member login procedure;
  • the subscription renewal notices;
  • the attachment upload part of the broadcast message routine.

In all cases, the information entered in the forms is processed via the API rather than using the completed entries. The necessary code can be found in Section 7 of the functions.php file. Six functions are used; four of them relate to error processing and the fifth to directing members who have logged in to the Member App dashboard. Details can be found on the functions.php page. The sixth function carries out the processing of successful form entries; action taken for each of the Member App functions concerned is described in the following paragraphs. When a form is created, WPForms assigns it a unique reference number and this is used to identify the form in the code.

Broadcast Message Upload Form (18306)

This form is displayed by the Broadcast II page if the user wishes to add an attachment to a broadcast message. It contains two drag-and-drop boxes for the inclusion of the English and French attachments respectively. For such uploads WPForms places the selected files in its own folder in the uploads folder which houses the Media Library (/public_html/wp-content/uploads/wpforms) with each form having its own sub-folder whose name begins with the form reference number – in this case ‘18306’. The uploaded file will have a suffix added to it to ensure its uniqueness. Both the original file name and the adjusted file name are passed by WPForms to the API. The MGF code then stores both names in session variables for later use in the broadcast message process and returns control to the Broadcast II page.

Subscription Renewal Notices Form (19798)

This form is displayed by clicking the ‘Subscription Renewal Notices’ option in the Member App dashboard. The user will enter the subscription expiry year and select one of seven different options. These two data items are passed to the API. The MGF code first loads the file containing the text of emails sent to members (email_texts.php) and then the script which carries out the processing according to the information received from WPForms (renewals.php).

Sign In / Se connecter (15048)

This form is displayed by clicking ‘MEMBERS’ in the menu bar of the public website. After the member has entered their credentials and clicked ‘Submit’, the plugin will log the member in if their credentials are valid. The filter wpf_dev_process_redirect_url then redirects the user to the Member App dashboard.

Membership Form (15047) and Membership Form for Administrators (16637)

These two forms create new users / members in the WordPress database. The first is launched by clicking ‘Join’ on the public website and the second by an administrator clicking ‘Add a new member’ in the administrative area of the Member App dashboard. Processing of the two forms is the same except for what is described in the next paragraph.

With Membership Form, the new member selects their own password and also indicates the method by which their subscription is paid. Neither is possible with Membership Form for Administrators – which is completed by an MGF official. In this case, the new member is assigned a password equal to the username and they will be directed to change it to one of their own choice. The payment method is set to ‘not known’.


Selecting the ‘Settings’ option opens a dashboard with nine sections.

General (displayed as default)Overall styling setting and also contains the MGF licence key. The latter is not visible but can be found by logging into the MGF WPForms account. The access codes to this are in the MGF Dropbox: Site coordinates.txt.
EmailCustomises email template. Not used.
CAPTCHAAllows a selection of captcha technologies. Not used.
ValidationText of error messages to be used when validating data submitted to a form. Contains MGF bilingual messages (e.g. ‘This field is required / Ce champ est requis’.
PaymentsSettings for online payments via Stripe. Not used.
IntegrationManage integration with other suppliers (e.g. Brevo). Not used.
GeolocationCollects users’ geolocation data. Not used.
AccessDetermines who can use the plugin. Default (used) is administrators only.
MiscMiscellaneous general settings (including option to uninstall the plugin. All set OFF except ‘Hide plugin announcements and update details’.
WPForms Settings Options


Selecting the ‘Tools’ option opens a dashboard with six sections.

ImportImport a previously exported form or form data from another form plugin.
ExportExport forms, form templates or entries.
System InfoDisplays overall system information.
Scheduled ActionsDisplays information about WPForm-related cron jobs.
LogsEnable logging WPForms-related events. Set OFF.
Code snippetsLIbrary for use with the WPCode addon (not used).
WPForms Tools Options


Plugin: wpDataTables

wpDataTables is a commercial plugin for which MGF has a perpetual licence. It is used to create and manipulate tables which can then be embedded in a page. MGF uses the plugin to maintain the information contained in pages which are essentially lists, such as plant lists, recommendations, forthcoming events and so on.

To maintain a list, in the dashboard sidebar click: Pages -> List Generation -> Update a list. Instructions on how to update a list can be found on this page by clicking the link ‘Click here to see the instructions’. Lists can also be maintained by clicking ‘wpDataTables -> wpDataTables’ in the dashboard sidebar. Because of its sensitivity, this last is the only way to maintain the Privileges table which is used to control access to Member App functions (see ‘Members, Users and Roles‘ for more on this).

Structure of tables used by wpDataTables

Both the data displayed via the plugin and its own metadata tables are stored within the WordPress database. Display data can be one of two types: SQL or Manual. SQL tables are tables which have not been created by the plugin but from an external source, for example, the plant list tables which were imported from the spreadsheets used on the old MGF website. Manual tables are those created via the plugin. These will have a table name of ‘wp_mgf_datatable_n’ where ‘n’ is a unique number created by the plugin itself. SQL tables can have any name.

Table namePurpose
wp_mgf_wpdatachartsNot used by MGF
wp_mgf_wpdatatablesMetadata for each data table
wp_mgf_wpdatatables_cacheUsed internally by the plugin
wp_mgf_wpdatatables_columnsMetadata for each column of each table
wp_mgf_wpdatatables_rowsUsed internally by the plugin
Metadata tables used by the plugin

These tables should not be altered from outside the plugin. The ‘content’ column from the table ‘wp_mgf_wpdatatables’ is used by the MGF plugins which generate the list pages.