2013-12-13 6 views
1

Я хочу отправить приветственное письмо, когда пользователь регистрируется в моем приложении. Когда пользователь регистрируется, он перенаправляется на страницу своего профиля. Я пытался отправлять электронную почту во время создания пользователя, но письмо электронной почты() занимает 7 секунд для отправки электронной почты, и страница ждет до тех пор, а затем перенаправляет пользователя на профиль через 7 секунд.отправить электронную почту в фоновом режиме в php

Это нежелательно. Я хочу перенаправить пользователя, как только он зарегистрируется, и отправить электронное письмо по этому процессу. Это занимает 7 секунд, не знаю почему. Я пробовал его в Интернете на godaddy и hostgator, а также на моем localhost.

BTW: Я использую PHPMailer для отправки электронной почты.

Как я могу сделать автономный процесс, который при вызове вызывает мой sendMail.php с параметрами электронной почты $ _POST [] {to, subject, body}.

i хотя вызов ajax будет делать трюк, но как только моя страница перенаправляется с регистрации на профиль, сценарий электронной почты останавливается. Я попробовал этот код:

<script language="JavaScript"> 
    $.post("sendMail.php", { to: "$to", subject: "$subject", htmlBody: "$htmlBody", altBody: "$altBody" }); 
location.href=profile.html 
</script> 

Пожалуйста, помогите, я искал много, но они работают на скорлупе, которые я не являюсь, и другие решения были UNIX/Linux на основе. Я хочу, чтобы он работал на xampp, а также на общем хостинге godaddy linux, без доступа к ssh.

+1

Лучше всего настроить сервер заданий и передать эти вещи без асинхронных сообщений. – wesside

+0

Поместите перенаправление в функцию успеха вашего вызова ajax. Вроде: $ .post ("sendMail.php ", {to:" $ to ", subject:" $ subject ", htmlBody:" $ htmlBody ", altBody:" $ altBody "}, function() {location.href = profile.html;}); – FLX

+0

Have посмотрите на http://php.net/ignore_user_abort, чтобы ваш PHP-скрипт работал в настоящий момент, когда ваш браузер отключается. –

ответ

0

Вы можете использовать Mail_Queue, который является очередью заданий, специально для отправки электронной почты, или использовать Zend_Queue [ZF1, ZF2] написать что-то настроить, чтобы работать с PHPMailer. Вы даже можете подумать об использовании Gearman.

+0

Могу ли я использовать REST api для создания асинхронных вызовов для отправки почты, например, с помощью библиотеки nusoap? документация на gearman не очень дружелюбна ко мне по крайней мере, и другие уроки не очень полезны, для этого требуется, чтобы рабочий сервер выполнялся все время, а это не то, что я использую, я не понял пример mail_queue. он содержит require_once «Mail/Queue.php»; в примере кода и не упоминает, где они получили эти файлы и что они содержат. – ADi

+0

Вам нужно будет настроить форму cronjob в случае Mail_Queue или Zend_Queue; или вы можете попробовать RESTful API, используя nusoap, phpmailer или что-то еще. Вам нужно либо установить пакет Mail_Queue через установщик PEAR, либо загрузить файлы из http://pear.php.net/package/Mail_Queue/download – kguest

0

Вы можете попробовать разместить javascript на своей странице профиля, чтобы он запускался, как только они попали на страницу профиля, а не на форму submit. Просто нужно проверить, было ли отправлено приветственное письмо уже в вашем скрипте sendMail.php.

Но использование этого сценария для отправки электронной почты может не очень хорошая идея, так как это может позволить злоумышленнику отправлять электронное письмо с тем, что когда-либо было им нужно, кому бы они ни захотели, и если он был помечен как спам, тогда это будет ваш сервер, который заблокирован. Это очень распространенный метод, используемый «спамерами».

Вам нужно быть очень осторожным в том, как вы передавали электронное письмо до его отправки, чтобы не нарушать ваше согласие с вашей хостинговой компанией.

+0

Очень хорошая точка, о которой упоминалось, я не думал о дыре в безопасности. Спасибо за это. Я также думал, что отправка электронной почты с клиентской стороны не подходит. но я не хочу, чтобы сценарий был depandand на что угодно, если я отправляю сообщение с страницы профиля. пользователь может перенаправить на другую страницу или закрыть браузер, следовательно, та же проблема, что и в настоящее время. – ADi

+0

Тогда вы можете после нажатия «сохранить» перенаправить их на пустую страницу, на которой скрипт отправит приветственное письмо, но также с помощью include или require, добавьте страницу, которую вы хотите, чтобы они получили что-то, отображаемое для них, а затем, когда они заходят в следующий раз, когда просто переходят на страницу обычного профиля или что-то еще. – Chris

0

Php - однопоточный язык. Это означает, что вы не можете начать работу до того, как предыдущий выполнил (и закончил) ...

Вы можете изменить заказ задачи. Я имею в виду, что вы можете отправить электронное письмо после полной страницы приветствия.

Попробуйте этот заказ;

1) Регистрация Пользователь

2) показать страницу приветствия,

3) отправить письмо с приветствием ....

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

+0

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

+0

да, но это может произойти, даже если вы отправляете с ajax. если пользователь закрывает или перенаправляет другую страницу, не важно, как вы отправляете электронное письмо. задача будет прекращена ... возможно, вы попытаетесь зарегистрировать cronjob с php для отправки электронной почты (регистрация cronjob занимает в секунду), а затем отобразить страницу приветствия. (и после отправки электронной почты, удалите cronjob) – tomas

+0

да cron job кажется хорошей идеей, я просто не знаю, как сделать это в php еще, теперь будет google. Благодарю. если у меня есть ответ в соответствии с моей проблемой, это дало бы мне много решений для моей задачи, я могу использовать ту же систему, когда совершена покупка, и отправьте электронное письмо. также я мог бы использовать систему для выполнения некоторых задач, когда произошло определенное событие. эта автономная система процессов очень полезна, и я все еще ищу такую ​​реализацию. но kguest предоставил хороший souyrce для моей текущей проблемы. пытаясь это сделать. – ADi