PHPMailers отлично справляется с отправкой писем из учетной записи gmail. Но это занимает довольно много времени, и страница не будет отображать ответ до тех пор, пока сообщение не будет отправлено. Любые способы отправки электронной почты в фоновом режиме, чтобы я мог обеспечить пользователю более удобную работу пользователя? Благодаря!
Он будет срабатывать, когда это необходимо (избегая использования CRONs), быстро, потому что вызвано фоном и немедленным.
1. Почтовая очередь. Возьмите все поля в MySQL таблицы со вставкой, что-то вроде:
$queryIN="INSERT INTO email_queue (date,subject,body,destination,idle) values (...)"; mysql_query($queryIN);
Это важно, потому что вам понадобится независимый фоновый процесс, так что это также хорошая идея для регистрации и аудита всех входящих писем.
2. PHP exec (). После вставки в MySQL время для вызова в качестве внешнего исполнения:
exec("wget -qO- http://domain.com/index.php?process_email_queue=1 &> /dev/null &");
3. Тот же файл сценария index.php или другой для обработки вызова очереди:
Таким образом, он будет вызывать наш index.php (вы можете использовать другой файл имен) и обрабатывать исходящие:
if ($_GET['process_email_queue']==1) { ...code for sending idle emails queue... }
Возможно, вам нужно коснуться некоторых опций php.ini для exec (), это не большая проблема.
Как только все будет работать правильно, вы предложите лучшую навигацию по веб-интерфейсу и обработку электронной почты для быстрого ответа и нулевого ожидания.
В некоторых случаях вы переходите от ожидания от прямого письма в 2.60 секунд до очереди-exec-background 0,024 сек, то есть улучшения x11 быстрее.
Вы можете использовать запрос AJAX для отправки данных в PHP-скрипт, который затем отправит электронное письмо.
Вы можете использовать exec
чтобы сообщить интерпретатору PHP CLI для запуска вашего сценария в фоновом режиме.
если вы находитесь в Linux:
exec("/path/to/php /path/to/your/mailer/script \"arg1\" \"arg2\" \"arg3\" \"arg4\" > /dev/null 2> /dev/null &");
если вы находитесь на окнах:
pclose(popen("start /B /path/to/php /path/to/php/script \"arg1\" \"arg2\" \"arg3\" \"arg4\"","r"));
Это требует, чтобы на вашем сервере был установлен интерпретатор CLI PHP, и вам нужно знать путь к двоичному файлу PHP (спросите своего хоста, если вы не знаете). Вам также необходимо знать абсолютный путь к вашему скрипту PHP, который вы можете найти с помощью get_cwd()
.
Если вы заинтересованы в отправке электронной почты через async PHP, вы можете посмотреть на этот ответ. https://stackoverflow.com/a/22627769/829533
<?php class AsyncEmail extends Thread { public function __construct($arg){ $this->arg = $arg; } public function run() { /** Add your email sending code here. **/ } } // and call this following lines in loop $aEmail = new AsyncEmail( $arg ); var_dump($aEmail->start()); ?>
он использует Thread of php PECL pthreads
library
Обратите внимание, что настройка PECL
для вашей среды Apache – самая сложная часть
Плюс в том же самом сообщении люди предлагали установить работу кукурузы для таких требований, но это полностью зависит от ваших требований. ты можешь
Существует много программ для фонового процесса, таких как Beanstalkd, GearMan и т. Д. …
Я предлагаю beanstalkd, потому что он очень легкий и простой. Легко создавать задания и переходить в очередь (Tube в их терминах).
Один дополнительный работник потребовал, чтобы он продолжал следить за трубой и обрабатывать, если какая-либо работа пришла.
Предоставляя вам некоторые ссылки, которые могут вам помочь,
На самом деле есть еще много, но я не помню имя прямо сейчас.
С уважением