<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>WordPress plugin - Matteo Cisilino</title>
	<atom:link href="https://www.cisilino.com/en/tag/wordpress-plugin/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.cisilino.com/en/</link>
	<description>Guide su WordPress, server e sicurezza</description>
	<lastBuildDate>Fri, 30 Oct 2026 16:18:45 +0000</lastBuildDate>
	<language>en-GB</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.4</generator>
	<item>
		<title>WordPress email log: why I check it with FluentSMTP</title>
		<link>https://www.cisilino.com/en/2026/10/31/wordpress-email-log-why-i-check-it-fluentsmtp/</link>
					<comments>https://www.cisilino.com/en/2026/10/31/wordpress-email-log-why-i-check-it-fluentsmtp/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Sat, 31 Oct 2026 08:00:00 +0000</pubDate>
				<category><![CDATA[Servers and databases]]></category>
		<category><![CDATA[email]]></category>
		<category><![CDATA[FluentSMTP]]></category>
		<category><![CDATA[SMTP]]></category>
		<category><![CDATA[WordPress plugin]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=1312</guid>

					<description><![CDATA[<p>Why I check the WordPress email log in FluentSMTP before server logs: failed sends, manual resending, encrypted SMTP credentials, backup connections, and the log's honest limits.</p>
<p>The post <a href="https://www.cisilino.com/en/2026/10/31/wordpress-email-log-why-i-check-it-fluentsmtp/">WordPress email log: why I check it with FluentSMTP</a> first appeared on <a href="https://www.cisilino.com/en/">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p class="wp-block-paragraph">I manage several WordPress sites. On each one, more emails go out than anyone would guess: contact notifications, password resets, order confirmations, alerts to site managers. The WordPress email log in FluentSMTP is the tool I check as soon as a client writes &#8220;I never got anything.&#8221; I used to look at the SMTP server logs from the command line. I had to match grep output and timestamps by hand. Now I open a page in the WordPress dashboard and it&#8217;s all right there.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/fluent-smtp-log-invii-email-wordpress.webp" alt="WordPress email log shown in the FluentSMTP dashboard" width="1200" height="630"/></figure>



<h2 class="wp-block-heading">Why I check the WordPress email log before the server logs</h2>



<p class="wp-block-paragraph">The typical case is always the same. A contact form that &#8220;isn&#8217;t arriving&#8221;. A client who never gets the password reset email. An order left without a confirmation. Without a log at hand, the first guess is the spam folder. Then the SMTP server logs. Then maybe the firewall. With FluentSMTP I skip those steps. I can see straight away whether WordPress actually tried to send that email. To whom, when, and with what response from the sending server.</p>



<p class="wp-block-paragraph">FluentSMTP logs every call to <code>wp_mail()</code>. Not just emails from third-party plugins, but also the ones generated by core: new-user notifications, update reminders, error alerts. For every send, the log shows the sender, recipient, subject, full headers, and message body. And the response from the SMTP provider or API used. If an email failed, that server response is right there. I don&#8217;t have to guess it.</p>



<h2 class="wp-block-heading">What I actually find in the sending log</h2>



<p class="wp-block-paragraph">The plugin supports dozens of connectors: Amazon SES, SendGrid, Mailgun, Brevo, Postmark, SparkPost. Also Google Workspace and Microsoft 365 via OAuth, as well as plain authenticated SMTP. On the sites I manage I almost always use authenticated SMTP with the client&#8217;s own domain. Sometimes a dedicated API, when the email volume grows. Either way, the WordPress email log doesn&#8217;t change. Every row has a status, sent or failed. There&#8217;s a button to review the content or resend the message, without the user having to repeat the action that triggered it.</p>



<p class="wp-block-paragraph">Manual resending is the feature I use most. A form filled in twice because &#8220;it never arrived&#8221; becomes one click in the log. Not a fresh complaint from the client. For repeated failures I&#8217;ve set up notifications on Telegram. As soon as a connection stops working, I know before anyone writes to tell me. Instead of finding out from a support ticket.</p>



<p class="wp-block-paragraph">The log isn&#8217;t only about notifications aimed at me or the client who manages the site. Every outgoing email the site generates towards third parties ends up there too: the order confirmation an online shop sends to its customer, a payment receipt, a shipping notice. If that confirmation doesn&#8217;t arrive, I see it in the WordPress email log exactly like an internal notification, with the same button to resend it to the right recipient without making them repeat the purchase.</p>



<h2 class="wp-block-heading">How I set up FluentSMTP on the sites I manage</h2>



<p class="wp-block-paragraph">After connecting the right connector, I change the log retention. By default it stays on for a long time. I set it to 30-60 days, depending on the site&#8217;s traffic. That&#8217;s enough to trace back a problem reported late. Without filling the database with rows I&#8217;ll never look at. I then turn on at least one notification channel for failures, Telegram or Slack depending on the client. The log alone doesn&#8217;t alert anyone: it has to be opened to be read.</p>



<p class="wp-block-paragraph">On sites with contact forms I also use <a href="https://www.cisilino.com/en/2026/10/29/wordpress-security-plugin/">Cisilino Site Defense Network</a> to block bots. Less incoming spam means fewer emails generated by the forms. The log stays easier to read, with less noise to filter through when I&#8217;m looking for the right message.</p>



<h2 class="wp-block-heading">SMTP credentials don&#8217;t stay in plain text in the database</h2>



<p class="wp-block-paragraph">One detail I always check before saving a connection: where the credentials end up. FluentSMTP encrypts them by default with WordPress&#8217;s own SALT keys, the ones already present in <code>wp-config.php</code> for session security. Encryption can be switched off, but the plugin itself flags that as not recommended. On the sites I manage I prefer another option: saving the API or SMTP password directly in <code>wp-config.php</code>, outside the database, by defining the constants before the plugin reads them. That way, even a database dump or unauthorised access to the dashboard doesn&#8217;t expose the sending provider&#8217;s key. It&#8217;s the same principle I apply elsewhere: fewer secrets in the database, the better.</p>



<h2 class="wp-block-heading">Several connections together, not just one at a time</h2>



<p class="wp-block-paragraph">FluentSMTP lets you configure several connections together, not just one at a time. On one site I set a default connection and add a second one as a backup: if the first provider doesn&#8217;t respond, sending switches automatically to the backup connection, without me having to step in. Which connection gets used depends on the sender address: each connection has its own &#8220;From&#8221;, everything else goes through the default one, with the backup kicking in only if the default one really fails (a provider error, not an email that ended up in spam). It&#8217;s one of the reasons I prefer it to a single SMTP setup with no alternative: if SendGrid or Amazon SES has a problem for a few hours, the site keeps sending anyway, and I see it straight away in the WordPress email log. All included in the free version, with no paid pro version: you only pay the sending provider you choose, not the plugin.</p>



<h2 class="wp-block-heading">A daily health check, not just when something breaks</h2>



<p class="wp-block-paragraph">Besides the row-by-row log, FluentSMTP runs a connection health check every day, automatically. If the provider stops responding, the alert arrives before a client writes to tell me &#8220;the site isn&#8217;t sending emails any more&#8221;. The same dashboard shows a chart with daily totals of successful and failed sends: useful for seeing at a glance whether a drop is normal or a sign that something is breaking, without having to open the WordPress email log row by row every time. There&#8217;s also a periodic email summary, with the week&#8217;s totals: it isn&#8217;t a failure alert, it&#8217;s a bulletin I skim through to know whether the sending volume is within the norm.</p>



<p class="wp-block-paragraph">For anyone who, like me, manages several sites from the command line, FluentSMTP also exposes WP-CLI commands: a test send, a connection health check, statistics, and cleanup of old logs. I use them in the same scripts that already run on the servers for other maintenance checks, without having to open every site&#8217;s dashboard one by one.</p>



<h2 class="wp-block-heading">The honest limits of the WordPress email log</h2>



<p class="wp-block-paragraph">It isn&#8217;t a magic solution. Retention is based on days, not on a maximum number of rows. On a site with a lot of transactional traffic the log table can grow quickly. It&#8217;s worth keeping an eye on it, or setting a shorter retention period. Failure notifications only arrive on the chat channels you&#8217;ve configured, not by email. That makes sense: an email warning about a failed email risks failing in turn too. But it&#8217;s worth knowing before relying on it.</p>



<p class="wp-block-paragraph">Finally, the log records what happened on the WordPress side and the provider&#8217;s side. It doesn&#8217;t guarantee delivery into the recipient&#8217;s inbox. If an email is marked as sent but ends up in spam, that&#8217;s a domain reputation or SPF/DKIM configuration issue. Not something a log can fix on its own. It&#8217;s still the first place I look, before any other check.</p>



<p class="wp-block-paragraph">The plugin is free and open source. Official page on <a href="https://wordpress.org/plugins/fluent-smtp/" target="_blank" rel="nofollow noopener">wordpress.org</a>, with no features locked behind a pro version. For anyone managing even a single site with a contact form, it&#8217;s worth installing just for the WordPress email log. The first time it turns &#8220;I never got the email&#8221; into a one-minute fix instead of half an hour, it&#8217;s paid for itself.</p><p>The post <a href="https://www.cisilino.com/en/2026/10/31/wordpress-email-log-why-i-check-it-fluentsmtp/">WordPress email log: why I check it with FluentSMTP</a> first appeared on <a href="https://www.cisilino.com/en/">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/en/2026/10/31/wordpress-email-log-why-i-check-it-fluentsmtp/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>CSDN manual: introduction</title>
		<link>https://www.cisilino.com/en/2026/10/30/csdn-manual-introduction/</link>
					<comments>https://www.cisilino.com/en/2026/10/30/csdn-manual-introduction/#respond</comments>
		
		<dc:creator><![CDATA[matteocisilino]]></dc:creator>
		<pubDate>Fri, 30 Oct 2026 16:05:18 +0000</pubDate>
				<category><![CDATA[CSDN manual]]></category>
		<category><![CDATA[Cisilino Site Defense Network]]></category>
		<category><![CDATA[WordPress plugin]]></category>
		<guid isPermaLink="false">https://www.cisilino.com/?p=1043</guid>

					<description><![CDATA[<p>What the Cisilino Site Defense Network plugin is, what it does and doesn't do, the requirements and the index of the 16 chapters of the manual.</p>
<p>The post <a href="https://www.cisilino.com/en/2026/10/30/csdn-manual-introduction/">CSDN manual: introduction</a> first appeared on <a href="https://www.cisilino.com/en/">Matteo Cisilino</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>This CSDN manual explains how to use Cisilino Site Defense Network, a WordPress plugin that protects your site from abusive login attempts. I have written it for anyone who manages a site and wants to understand what each tab does before touching it. Here I describe version 1.0.15.</p>
<figure class="wp-block-image size-large"><img decoding="async" src="https://www.cisilino.com/wp-content/uploads/2026/10/manuale-csdn-introduzione.webp" alt="Diagram from the CSDN manual: the WordPress Settings menu with the plugin's ten tabs" width="1200" height="630"/></figure>
<h2>What is Cisilino Site Defense Network</h2>
<p>Cisilino Site Defense Network, CSDN for short, is a WordPress plugin. It counts failed logins for each IP address. When an IP reaches the threshold, it blocks it by writing it into the site&#8217;s <code>.htaccess</code> file.</p>
<p>The plugin works on its own, with no configuration at all. Connecting it to an external panel is optional. If you don&#8217;t configure that connection, the plugin makes no outbound calls whatsoever.</p>
<p>You will find it in the WordPress side menu, at the item marked by point 1 in the image: <strong>Settings &gt; Cisilino Site Defense Network</strong>. Inside are ten tabs, listed at point 3.</p>
<h2>What it does</h2>
<p>The plugin brings together several defences, all managed from that one page.</p>
<ul>
<li>Automatic blocking of IPs that fail the login too many times, with a whitelist for trusted networks.</li>
<li>Manual blocking and unblocking of a single IP, even for a set time.</li>
<li>Optional rules for <code>.htaccess</code>: no PHP in <code>uploads</code>, no directory listing, sensitive files protected.</li>
<li>Security HTTP headers and automatic logout of inactive administrators.</li>
<li>A policy on who can create new users.</li>
<li>A limit on authors&#8217; publishing, and on comments and Contact Form 7 submissions from guests.</li>
<li>A log of the site&#8217;s activity and an integrity check of the plugin&#8217;s files.</li>
<li>A PHP error log, which you can switch on when you need it.</li>
</ul>
<h2>What the plugin doesn&#8217;t do</h2>
<p>This CSDN manual also covers the plugin&#8217;s limits, and it&#8217;s worth knowing them straight away. The plugin is not a web application firewall: it doesn&#8217;t analyse the content of requests. The word IDS in the tab name refers to file and folder access rules, not a genuine intrusion detection system.</p>
<ul>
<li>It doesn&#8217;t prevent file tampering: it only detects it, and anyone who already has write access can bypass the check.</li>
<li>It doesn&#8217;t make a copy of <code>.htaccess</code> before changing it.</li>
<li>It doesn&#8217;t offer a Content-Security-Policy header.</li>
<li>It doesn&#8217;t hide the user list exposed by the WordPress REST API.</li>
<li>It has no list of email domains and no captcha for registrations.</li>
<li>On a server that ignores <code>.htaccess</code>, such as nginx, the server-level rules have no effect.</li>
</ul>
<p><strong>Warning:</strong> a plugin reduces risk, it doesn&#8217;t eliminate it. Keep WordPress, themes and plugins up to date, and back up your site, even if you use CSDN.</p>
<h2>Requirements</h2>
<ul>
<li>WordPress 5.8 or later, and PHP 7.4 or later.</li>
<li>Apache, or a compatible LiteSpeed, for IP blocking and hardening. The <code>.htaccess</code> file must be writable.</li>
<li>An account with permission to manage settings. On a single site this is <code>manage_options</code>. On a multisite network you need the super admin.</li>
<li>For the panel, optional: an https address, a customer code and an API key.</li>
</ul>
<p>Updates arrive through WordPress&#8217;s normal mechanism, under Plugins &gt; Updates. The plugin is built for the WordPress.org directory, where it has its <a href="https://wordpress.org/plugins/cisilino-site-defense-network/" target="_blank" rel="noopener">official page</a>: that&#8217;s the right place to check which version is published.</p>
<h2>How to read the CSDN manual</h2>
<p>You can read the chapters in order or jump straight to the one you need. Every chapter has an image with a map of the page and numbered red circles: number 1 marks the menu item, 2 the active tab, and the rest mark the sections.</p>
<p>If this is your first time, start with installation and the first run. If something isn&#8217;t working, go straight to the troubleshooting chapter. These are the chapters:</p>
<ol>
<li>Introduction: this page.</li>
<li><a href="https://www.cisilino.com/en/?p=973">Installing and activating Cisilino Site Defense Network</a></li>
<li><a href="https://www.cisilino.com/en/?p=974">Connecting the plugin to the panel: Remote settings</a></li>
<li><a href="https://www.cisilino.com/en/?p=975">General tab: block threshold and plugin status</a></li>
<li><a href="https://www.cisilino.com/en/?p=976">Blocking, unblocking and whitelisting: the manual overrides</a></li>
<li><a href="https://www.cisilino.com/en/?p=977">Blocked IPs tab: reading the blacklist</a></li>
<li><a href="https://www.cisilino.com/en/?p=978">Hardening / IDS: the rules for .htaccess</a></li>
<li><a href="https://www.cisilino.com/en/?p=979">Upload monitoring and the integrity check</a></li>
<li><a href="https://www.cisilino.com/en/?p=980">Test tab: checking that the protections work</a></li>
<li><a href="https://www.cisilino.com/en/?p=981">Paranoic Hardening: security headers and the admin session</a></li>
<li><a href="https://www.cisilino.com/en/?p=982">User registration: who can create accounts</a></li>
<li><a href="https://www.cisilino.com/en/?p=983">Rate limiting: limits on authors and visitors</a></li>
<li><a href="https://www.cisilino.com/en/?p=984">Activity log: what happened on the site</a></li>
<li><a href="https://www.cisilino.com/en/?p=985">Debug log: PHP errors in their own file</a></li>
<li><a href="https://www.cisilino.com/en/?p=986">Troubleshooting and frequently asked questions</a></li>
<li><a href="https://www.cisilino.com/en/?p=987">Deactivation, uninstallation and personal data</a></li>
</ol>
<p>One note to avoid confusion. Manually blocking and unblocking an IP, and the whitelist, live in the <strong>General</strong> tab, not in <strong>Blocked IPs</strong>. The same applies to the upload monitoring form.</p>
<p>All the field and button labels throughout this CSDN manual are copied exactly as you see them in the plugin. To get started, move on to the next chapter: <a href="https://www.cisilino.com/en/?p=973">Installing and activating Cisilino Site Defense Network</a>.</p><p>The post <a href="https://www.cisilino.com/en/2026/10/30/csdn-manual-introduction/">CSDN manual: introduction</a> first appeared on <a href="https://www.cisilino.com/en/">Matteo Cisilino</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>https://www.cisilino.com/en/2026/10/30/csdn-manual-introduction/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
