Это весь код, связанный с разделом, о котором я прошу (см. Сокращенное более подробное описание пункта ниже этого).Как я могу запустить функцию PHP mail() без загрузки пользователем страницы/.php-файла?
if($register == "true") //Registration "checks out" okay
{
$gooddata['password'] = md5($gooddata['password']);
//This is where the information is saved to the database.
$query = "INSERT INTO member (username,password,votingdistrict,email,birthmonth,birthyear,city,state,zip5,registeredtovote)
VALUES ('$gooddata[username]','$gooddata[password]','$gooddata[votingdistrict]','$gooddata[email]','$gooddata[birthmonth]','$gooddata[birthyear]','$gooddata[city]','$gooddata[state]','$gooddata[zip5]','$gooddata[registeredtovote]')";
$result = mysqli_query(dbcxn('member'),$query)
or die("<h3 class=\"headertag\">Username or E-mail already exists. <a href=\"./register.php\">Try a different username</a> or <a href=\"./resetpassword.php\">reset your password</a></h3>\n</header>");
if($result)
{
$query = "SELECT vernumber FROM member WHERE username='$gooddata[username]'";
$result = mysqli_query(dbcxn('member'),$query)
or die("Could not find a verification number!");
if($result)
{
$preextract = mysqli_fetch_assoc($result);
extract($preextract);
$email = $gooddata['email'];
$subject = "Confirmation of Unipartisan registration for " . $gooddata['username'];
$message = wordwrap("Please click <a href=\"\">this link<a> to complete your registration.<br /> \n" .
"If you did not try to register with <a href=\"http://unipartisan.com\">Unipartisan.com</a> please disregard this e-mail or click here.",70);
$mailsent = mail($email,$subject,$message);
if($mailsent == true)
{
echo "An e-mail has been sent to you to complete your registration</h3>\n";
}
else
{
echo "The registration email failed to send</h3>\n";
}
}
}
echo "</header>\n";
echo "<article class=\"index\">\n";
echo " <h3>Return to the <a href=\"./index.php\">homepage</a></h3>\n";
echo "</article>\n";
}
Мой вопрос, как я все еще могу отправить пользователю по электронной почте после того, как регистрация будет успешно завершен, но не делая это в том же .php файл, и без того, чтобы отправить этот файл .php пользователя ,
Причина, по которой я спрашиваю, заключается в том, что функция mail() занимает много времени для обработки, и страница не загружается в течение примерно 30 секунд. Однако письмо действительно отправляется успешно.
Ниже приведен конкретный раздел, о котором я говорю.
$email = $gooddata['email'];
$subject = "Confirmation of Unipartisan registration for " . $gooddata['username'];
$message = wordwrap("Please click <a href=\"\">this link<a> to complete your registration.<br /> \n" .
"If you did not try to register with <a href=\"http://unipartisan.com\">Unipartisan.com</a> please disregard this e-mail or click here.",70);
$mailsent = mail($email,$subject,$message);
if($mailsent == true)
{
echo "An e-mail has been sent to you to complete your registration</h3>\n";
}
Я знаю, что я могу использовать cronjob для этого, но я только найти ситуации, когда программисты пытаются установить повторяющийся сценарий по времени, или они пытаются задержать сценарий. Я все же хочу, чтобы он запускался немедленно, но я не хочу запускать почтовую функцию в том же файле, что и обработка регистрации, потому что это вызывает уродливую задержку на стороне клиента.
Как я могу сделать это одновременно с завершением регистрации?
Вот соответствующий раздел моего PHP.ini.
[mail function]
; For Win32 only.
; http://php.net/smtp
;SMTP = localhost
; http://php.net/smtp-port
;smtp_port = 25
; For Win32 only.
; http://php.net/sendmail-from
;sendmail_from = [email protected]
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
; http://php.net/sendmail-path
sendmail_path = /usr/sbin/sendmail -t -i -f [email protected]
; Force the addition of the specified parameters to be passed as extra parameters
; to the sendmail binary. These parameters will always replace the value of
; the 5th parameter to mail(), even in safe mode.
;mail.force_extra_parameters =
«Функция mail() требует много времени для обработки, и страница не будет загружаться в течение примерно 30 секунд». Это странно. Он должен просто передать данные в MTA, мгновенно. – zerkms
Эта вещь MTA, о которой вы говорите, может быть неправильной. Я использую sendmail в Linux Mint 13, и я установил свой почтовый путь PHP.ini в/usr/sbin/sendmail. Я добавлю свой PHP.ini к вопросу. –
Я использую постфикс для ослов лет и не имел проблем. Гораздо проще настроить, чем sendmail (установить, и он просто работает). Возможно, было бы проще попробовать постфикс, если сможете. –