How do I increase phplist mail send speed from 10K to 50K an hour?

I have a dedicated server for sending mails with 32gb ram, 8 CPU, OS: Cent OS and phplist version 3.4.1.

With this setup phplist should be able to send around 50K emails per hour with ease but its sending around10K. I did trial and error with config.php file to increase the speed but no effect .

I believe there is something am missing which is limiting the emails to around 10K per hour. Please help me to increase the speed.

below are my configs



Queue and Load management



// If you set up your system to send the message automatically (from commandline),

// you can set this value to 0, so “Process Queue” will disappear from the site

// this will also stop users from loading the page on the web frontend, so you will

// have to make sure that you run the queue from the commandline

// check README.commandline how to do this


// This setting will activate an initial setup choice for processing the queue

// When “true” it will allow a choice between remote queue processing with the

// phpList service or processing it locally in the browser.

// when the value is “false”, you can use remote processing in your own way

// define(‘SHOW_PQCHOICE’,false);

// batch processing

// if you are on a shared host, it will probably be appreciated if you don’t send

// out loads of emails in one go. To do this, you can configure batch processing.

// Please note, the following two values can be overridden by your ISP by using

// a server wide configuration. So if you notice these values to be different

// in reality, that may be the case

// max messages to process

// if there are multiple messages in the queue, set a maximum to work on

define ( ‘MAX_PROCESS_MESSAGE’ , 5);

// process parallel

// if there are multiple messages in the queue, divide the max batch across them

// instead of sending them one by one.

// this only works if you use batch processing. It will divide the batch between the

// campaigns that need sending.


// define the amount of emails you want to send per period. If 0, batch processing

// is disabled and messages are sent out as fast as possible

define ( ‘MAILQUEUE_BATCH_SIZE’ , 0);

// define the length of one batch processing period, in seconds (3600 is an hour)

define ( ‘MAILQUEUE_BATCH_PERIOD’ , 3600);

// to avoid overloading the server that sends your email, you can add a little delay

// between messages that will spread the load of sending

// you will need to find a good value for your own server

// value is in seconds, and you can use fractions, eg “0.5” is half a second

// (or you can play with the autothrottle below)

define ( ‘MAILQUEUE_THROTTLE’ , 0);

// Mailqueue autothrottle. This will try to automatically change the delay

// between messages to make sure that the MAILQUEUE_BATCH_SIZE (above) is spread evently over

// MAILQUEUE_BATCH_PERIOD, instead of firing the Batch in the first few minutes of the period

// and then waiting for the next period. This only works with mailqueue_throttle off

// and MAILQUEUE_BATCH_PERIOD being a positive value

// it still needs tweaking, so send your feedback to mantis.phplist if you find

// any issues with it


// Domain Throttling

// You can activate domain throttling, by setting USE_DOMAIN_THROTTLE to 1

// define the maximum amount of emails you want to allow sending to any domain and the number

// of seconds for that amount. This will make sure you don’t send too many emails to one domain

// which may cause blacklisting. Particularly the big ones are tricky about this.

// it may cause a dramatic increase in the amount of time to send a message, depending on how

// many users you have that have the same domain (eg hotmail)

// if too many failures for throttling occur, the send process will automatically add an extra

// delay to try to improve that. The example sends 1 message every 2 minutes.

define ( ‘USE_DOMAIN_THROTTLE’ , 0);

define ( ‘DOMAIN_BATCH_SIZE’ , 1);

define ( ‘DOMAIN_BATCH_PERIOD’ , 120);

// if you have very large numbers of users on the same domains, this may result in the need

// to run processqueue many times, when you use domain throttling. You can also tell phplist

// to simply delay a bit between messages to increase the number of messages sent per queue run

// if you want to use that set this to 1, otherwise simply run the queue many times. A cron

// process every 10 or 15 minutes is recommended.

define ( ‘DOMAIN_AUTO_THROTTLE’ , 0);


// to limit the time, regardless of batch processing or other throttling of a single run of “processqueue”

// you can set the MAX_PROCESSQUEUE_TIME in seconds

// if a single queue run exceeds this amount, it will stop, just to pick up from where it left off next time

// this allows multiple installations each to run the queue, but slow installations (eg with large emails)

// set to 0 to disable this feature.

define ( ‘MAX_PROCESSQUEUE_TIME’ , 0);






//# default system language

// set the default system language. If the language cannot be detected, it will fall back to

// this one. It has to be the “ISO code” of the language.

$default_system_language = ‘en’;

//# use Precedence

// according to the email standards, the Precedence header is outdated, and should not be used

// however, Google/Gmail requests that the header is used.

// So, it’s up to you what to do. Yes, or No. Defaults to “yes” use it


// if you do not require users to actually sign up to lists, but only want to

// use the subscribe page as a kind of registration system, you can set this to 1 and

// users will not receive an error when they do not check a list to subscribe to


// Show private lists

// If you have a mixture of public and private lists, you can set this to 1, to allow

// your subscribers to see (and unsubscribe from) your private lists on their

// preferences page. By default it won’t show private (non-public) lists


// Show the link(s) to subscribe page(s) on the phpList public homepage (lists/)

define ( ‘SHOW_SUBSCRIBELINK’ , false );

// Show link to the preferences page on the phpList public homepage (lists/)

define ( ‘SHOW_PREFERENCESLINK’ , false );

// Show link to the unsubscribe page on the phpList public homepage (lists/)

define ( ‘SHOW_UNSUBSCRIBELINK’ , false );

// Show ‘All Subscribers’ section on Subscriber Lists page

// This flag enabled will show a list called “All subscribers” on the

// Subscriber Lists page that has all subscribers in the system as members.

// This prevents confusion if there are subscribers not assigned to lists and

// therefore total subscribers are than the sum of all list members.

define ( ‘SHOW_LIST_OFALL_SUBSCRIBERS’ , false );

// wrap html

// in some cases, strange newlines appear in the HTML source of campaigns

// If that’s happening to you, you may want to set this one

// define(‘WORDWRAP_HTML’,60);

// year ranges. If you use dates, by default the drop down for year will be from

// three years before until 10 years after this the current value for year. If there

// is no current value the current year will be used.

// if you want to use a bigger range you can set the start and end year here

// be aware that the drop down may become very large.

// if set to 0 they will use the default behaviour. So I’m afraid you can’t start with

// year 0. Also be aware not to set the end year to something relatively soon in the

// future, or it will stop working when you reach that year.

define ( ‘DATE_START_YEAR’ , 0);

define ( ‘DATE_END_YEAR’ , 0);

// empty value prefix. This can be used to identify values in select attributes

// that are not allowed to be selected and cause an error “Please enter your …”

// by using a top value that starts with this string, you can make sure that the

// selects do not have a default value, that may be accidentally selected

// eg. “-- choose your country”

define ( ‘EMPTY_VALUE_PREFIX’ , ‘–’);

// admin details for messages

// if this is enabled phplist will initialise the From in new messages to be the

// details of the logged in administrator who is sending the message

// otherwise it will default to the values set in the configure page that identify

// the “Default for ‘From:’ in a campaign”


// attribute value reorder limit

// for selectable attributes, like “select” and “radio” you can manage the order of the values

// by adding a number for each of them. After a certain number of values, this will disappear

// and it will automatically order alphabetically. This “certain number” is controlled here

// and it defaults to 100

// if you want to use this, uncomment this line and change the value


// test emails

// if you send a test email, phplist will by default send you two emails, one in HTML format

// and the other in Text format. If you set this to 1, you can override this behaviour

// and only have a test email sent to you that matches the user record of the user that the

// test emails are sent to

define ( ‘SEND_ONE_TESTMAIL’ , 1);

// send a webpage. You can send the contents of a webpage, by adding

// [] as the content of a message. This can also be personalised

// for users by using eg

// the timeout for refetching a URL can be defined here. When the last time a URL has been

// fetched exceeds this time, the URL will be refetched. This is in seconds, 3600 is an hour

// this only affects sending within the same “process queue”. If a new process queue is started

// the URL will be fetched the first time anyway. Therefore this is only useful is processing

// your queue takes longer than the time identified here.

define ( ‘REMOTE_URL_REFETCH_TIMEOUT’ , 1800);

// Users Page Max. The page listing subscribers will stop listing them and require a search,

// when the amount of subscribers is over 1000. With this settings you can change that cut-off point

define ( ‘USERSPAGE_MAX’ , 1000);

// Message Age. The Scheduling tab has an option to stop sending a message when it has reached a certain date.

// This can be used to avoid the campaign going out, eg when an event has already taken place.

// This value defaults to the moment of creating the campaign + the number of seconds set here.

// phpList will mark the campaign as sent, when this date has been reached

// 15768000 is about 6 months, but other useful values can be

// 2592000 - 30 days

// 604800 - a week.

// 86400 - a day

define ( ‘DEFAULT_MESSAGEAGE’ , 15768000);

// Repetition. This adds the option to repeat the same message in the future.

// After the message has been sent, this option will cause the system to automatically

// create a new message with the same content. Be careful with it, because you may

// send the same message to your users

// the embargo of the message will be increased with the repetition interval you choose

// also read the README.repetition for more info

define ( ‘USE_REPETITION’ , 1);

// admin language

// if you want to disable the language switch for the admin interface (and run all in english)

// set this one to 0

define ( ‘LANGUAGE_SWITCH’ , 1);

//# error 404 page

//# custom “File not found”.

//# in several places, phpList may generate a “file not found” page. If you want to provide your own design for this

//# page, you can set this here. This needs to be a file that is in your webserver document root

//# eg /home/youraccount/public_html/404.html

//# the contents are displayed “as-is”, so it will not run any PHP code in the file.

define ( ‘ERROR404PAGE’ , ‘404.html’);