Skip to main content

Want to make FluentCRM clearly stand out from the competition?

Shahjahan Jewel -- One way would be to make sure that the sending speed can beat the socks off everyone else.

My proposal: add a filter, so that developers can dynamically add more threads to the threaded sending speed.

The code would need to have relatively minor modifications to increase the number of threads being used to send emails. (It's just two right now?)

Basically, someone could set the threads to, say, 6 in functions.php. The code would then dynamically allocate the number of threads, based on list size, max sending speed, etc.

Offsets, etc could easily be calculated based on this.

I worked up the code for this, but don't have time to test it.

However, this would make a LOT of your customers very happy.

Keeping the configuration outside of the main interface would keep this away from those who shouldn't use it. However, you would then be able to let people with bigger servers (say a 20 core server), send at a much faster rate.

I know quite a few people who have stopped using FluentCRM because of sending speed. There are similar issues with competitors, though not as bad. This could very much set you apart.

"The ONLY Wordpress CRM that can send 200,000 emails an hour" sounds pretty good, right?

Jean-Marc DEDEYAN

It could be awesome !

Sella Yoffe

From a deliverability standpoint, you don't always want to send as fast as you can. You need to throttle and adjust the sending rate based on several factors, such as domain reputation and bounce messages from mailbox providers (usually 4XX error codes).

I would like to see automatic warm-up in FluentCRM, or split sending via multiple SMTP providers (I do that with Ongage).

Jacob Jans

Sella YoffeΒ -- I definitely want to see split sending and similar features. However, with a large list, we also need fast sending speed, so it doesn't take 8+ hours to send a campaign to our list.

Sella Yoffe

Most of us are using an SMTP provider (Cloud MTA), like Amazon SES, SparkPost, SocketLabs, SendGrid, MailGun, EmailIt, etc. They can definitely handle the volume. As I said, if it is wise from the sender perspective to send as fast as they can deliver.

If the bottleneck is WordPress/FCRM and API calls to the SMTP provider, I understand the need for increasing speed.
Jacob JansΒ 

Israel Smith

This is a recurring issue. Eduardo SachsΒ has written an extensive post where he highlights the hardcoded limits within FCRM for sending, automation processing, and more.

So far, Shahjahan JewelΒ and the FCRM dev team have remained silent on this.

It's astounding to me that there are even hardcoded limits in the software. That was the number one rule I learned at University and in industry for building quality software - never hardcode anything!

Further, the fact that Shahjahan Jewel and the team are ignoring the many requests for implementing filters, so that power users can optimise the software performance when they have the appropriate hardware, it just goes against any kind of sense or rationale.

I can only conclude that the team don't actually want to build an industry-grade piece of software, despite all the marketing hype.

I guess I shouldn't be surprised. I have built a plugin extension to allow additional features for Company records via additional Tabs, and it is evident that the architecture for the "Company" module has taken significant shortcuts and is not designed for performance, scalability or extensibility.

Shahjahan Jewel and team, it is ESSENTIAL that these hardcoded limits are converted to "filter-able" values for v3.0 of FCRM so you stop losing power users.

Eduardo Sachs

Israel SmithΒ  You hit the nail on the head. The fact that you found similar shortcuts and hardcoded logic in the "Company" module confirms that this is a systemic architectural philosophy, not just an isolated oversight. It seems the software was built for "good enough" scenarios on shared hosting, not for scale or enterprise infrastructure.

To the original proposal regarding multi-threading: While that is a great feature request for the future, we need to fix the foundation first. Multi-threading won't save us if the underlying queries are still hardcoded to fetch data in teaspoon-sized batches. We need the "handbrakes" removed from the database queries before we worry about adding more engine cylinders.

Sella YoffeΒ  Respectfully, that is a paternalistic approach to software design. You cannot build a tool that artificially limits the user based on what the developer thinks is "safe" or "wise" for everyone.

Imagine if you bought a high-performance code editor or a database engine, but the vendor hardcoded a delay that only allowed you to write 10 lines of code per minute or run 5 queries per second. Their justification? "We did this to prevent you from writing bugs or locking tables."

As a software engineer, you would find that unacceptable. You would say: "I know what I am doing, give me the raw power and let me manage the risks."

That is exactly what is happening here. We are professionals. We pay for dedicated IPs, we manage our domain reputation, and we configure our MTAs (SES, Postmark, etc) to handle the safety logic. FluentCRM is the interface, not the police. If I have a race car and I want to drive it at max speed on a track, the manufacturer shouldn't hardcode a speed limiter to 40mph just because a beginner might crash it in a parking lot.

Shahjahan JewelΒ The solution Israel and I are asking for does not require a complex rewrite like dynamic threading. It simply requires wrapping your existing hardcoded limits in apply_filters(). This is standard WordPress development practice. It would solve the problem for power users immediately without breaking anything for smaller users. The continued silence on such a simple fix is baffling.

Sella Yoffe

Those are two different things. My perspective is from an email deliverability standpoint as a professional in this field. If FluentCRM can provide better performance (sending 200K in one hour, as you suggested), I have no problem with that.

But you need to understand that the number of concurrent connections and throttling are something FluentCRM (like any ESP) needs to dynamically manage, because if you send too fast, you risk being rejected, deferred, or having to retry.

In short, slower sending is safer and better.
Eduardo SachsΒ 

Eduardo Sachs

Sella YoffeΒ  I understand your perspective on deliverability, but we need to verify where these decisions should be made in the software architecture.

I am not saying FluentCRM should have zero safety limits. My point is that these limits must not be hardcoded constants that treat every user the same way. They must be adjustable to fit the specific reality and environment of each client.

Let's use a specific analogy to make this clear:

Imagine you bought a Ferrari. It has a powerful engine designed for high speed. However, the manufacturer permanently locked the software in "Valet Mode," restricting the car to 30 mph. Their reasoning? "Driving fast is dangerous, so to prevent you from crashing, we decided you can never go above 30 mph."

That is exactly what is happening here. My server is the Ferrari engineβ€”it has the power. But FluentCRM is the software keeping me in Valet Mode.

  1. The Software Layer (FluentCRM): Its job is to process data. It makes sense to have default safe limits for a "learning driver" (shared hosting, new domains). But it MUST allow an "experienced driver" to unlock the full potential of the engine when they are on a race track (dedicated servers/enterprise infrastructure).

  2. The Strategy Layer (Warm-up/Spam): You mentioned warm-up. Warm-up is a temporary phase. It is like learning to drive. Once I have spent months building my reputation and warming up my IPs, I have graduated. At that point, the software should not continue to treat me like a beginner with a cold IP.

  3. The Decision Layer (The User): As the business owner, I am the one who pays for the infrastructure and manages the reputation. I should be the one to decide the pace. If I decide to push my server to the limit for a time-sensitive campaign, the software should enable that, not block it.

So, we are not asking to recklessly remove safety features. We are asking for the ability to configure them. If my environment allows for high-volume sending, I should be able to tell FluentCRM: "My environment is ready, please release the brakes."

Right now, we cannot do that without hacking the core files, and that is what needs to change.

Jacob Jans

Eduardo SachsΒ -- have you tested making the requested changes yourself, via manually updating the core plugin code? I'm curious how much difference it's made. I'm also wondering if putting in a pull request in their github repo would be worth trying?

I do think there's space in the marketplace for a sophisticated Wordpress plugin focused on email delivery -- including IP warmup, multiple sender testing, etc. Though maybe there's an industry standard outside of there.. (I would love to be able to have 2-4 sending servers my emails go through, to distribute risk, tracking CTR across them, etc, without paying the exorbitant prices charged by many email delivery companies.)

Israel Smith

Jacob JansΒ wait, there’s a GitHub repo for FluentCRM? I’ll look it up and see if I can find it, then I’ll try to submit a pull request for these filters.