back to phpList.org

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

define ( ‘MANUALLY_PROCESS_QUEUE’ , 1);

// 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(‘PROCESSCAMPAIGNS_PARALLEL’,true);

// 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

define ( ‘MAILQUEUE_AUTOTHROTTLE’ , 0);

// 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);

// MAX_PROCESSQUEUE_TIME

// 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);

/*

=========================================================================

Miscellaneous

=========================================================================

*/

//# 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

//define(‘USE_PRECEDENCE_HEADER’,false);

// 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

define ( ‘ALLOW_NON_LIST_SUBSCRIBE’ , 0);

// 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

define ( ‘PREFERENCEPAGE_SHOW_PRIVATE_LISTS’ , 0);

// 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”

define ( ‘USE_ADMIN_DETAILS_FOR_MESSAGES’ , 0);

// 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

// define(‘ATTRIBUTEVALUE_REORDER_LIMIT’,100);

// 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’);