Intereting Posts
Как сделать $ _GET более безопасным? Увеличение числа, начиная с 0000 в php В лаке не хватает кеша, куки? проблема с знаком «&» при использовании ajax для отправки данных на php Возьмите две переменные для даты и времени и объедините их, чтобы сделать одну дату Facebook cURL, как я? FOSUserBundle – как перенаправить уже зарегистрированных пользователей при попытке доступа к login_path Во всяком случае, чтобы упростить это гнездо крыс петлей foreach? Может кто-нибудь объяснить эту строку кода, пожалуйста? (Операторы логики и присваивания) Laravel, почему я не могу запустить успешную миграцию таблицы создания с немного отличающимся написанием имени таблицы? Почему W3C Validator не принимает теги <? Php include () в HTML5? Как установить параметр функции PHP для переменной в качестве значения по умолчанию Получить все элементы по имени класса с помощью DOMDocument Почему сериализация не включает имя кнопки отправки? Поиск внутри сериализованных данных с помощью MYSQL

Как отправить электронную почту с помощью PHPMailer в фоновом режиме?

PHPMailers отлично справляется с отправкой писем из учетной записи gmail. Но это занимает довольно много времени, и страница не будет отображать ответ до тех пор, пока сообщение не будет отправлено. Любые способы отправки электронной почты в фоновом режиме, чтобы я мог обеспечить пользователю более удобную работу пользователя? Благодаря!

Related of "Как отправить электронную почту с помощью PHPMailer в фоновом режиме?"

Использование очереди электронной почты и php exec () является одним из лучших способов.

Он будет срабатывать, когда это необходимо (избегая использования 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 &"); 
  • Обратите внимание, что опции из wget -q0- и &> … / 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 – самая сложная часть

Плюс в том же самом сообщении люди предлагали установить работу кукурузы для таких требований, но это полностью зависит от ваших требований. ты можешь

  • создайте новую таблицу для рассылки писем.
  • напишите php-скрипт для отправки писем, используя данные из новой таблицы создания
  • настроить работу кукурузы для запуска этого скрипта с некоторым интервалом

Существует много программ для фонового процесса, таких как Beanstalkd, GearMan и т. Д. …

Я предлагаю beanstalkd, потому что он очень легкий и простой. Легко создавать задания и переходить в очередь (Tube в их терминах).

Один дополнительный работник потребовал, чтобы он продолжал следить за трубой и обрабатывать, если какая-либо работа пришла.

Предоставляя вам некоторые ссылки, которые могут вам помочь,

  1. Beanstalkd
  2. Gearman

На самом деле есть еще много, но я не помню имя прямо сейчас.

С уважением