Здравствуйте!
На небольшом сайте на modx, после проведения оплаты, пользователь попадает на страницу об Успешной оплате. Есть PHP-сниппет, который берет данные из POST-запроса и создает пользователя.
Далее в PHP-сниппете генерируется пароль и он должен отправляться пользователю на почту, но этого не происходит, хотя пользователь создается.
Код PHP-сниппета:
<?php
// создаем пользователя
$user = $modx->newObject('modUser');
// функция генерации пароля
function rand_string( $length ) {
$chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
return substr(str_shuffle($chars),0,$length);
}
// задаем имя пользователя и пароль
$useremail = $_POST['CUSTOMER_EMAIL'];
$userpswd = rand_string(6);
$user->set('username', $useremail);
$user->set('password', $userpswd);
// сохраняем
$user->save();
// создаем профиль
$profile = $modx->newObject('modUserProfile');
// инициализируем поля
$profile->set('email', $useremail);
// добавляем профиль к пользователю
$user->addOne($profile);
// сохраняем
$profile->save();
$user->save();
// список групп
$groupsList = array('users');
$groups = array();
foreach($groupsList as $groupName){
// получаем группу по имени
$group = $modx->getObject('modUserGroup', array('name' => $groupName));
// создаем объект типа modUserGroupMember
$groupMember = $modx->newObject('modUserGroupMember');
$groupMember->set('user_group', $group->get('id'));
$groupMember->set('role', 1); // 1 - это членство с ролью Member
$groups[] = $groupMember;
}
// добавляем пользователя в группы
$user->addMany($groups);
$user->save();
// отправка пароля на почту
$message = "Ваш пароль для доступа к Практикуму: $userpswd";
$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY,$message);
$modx->mail->set(modMail::MAIL_FROM,'info@site.kz');
$modx->mail->set(modMail::MAIL_FROM_NAME,'SoftSkills');
$modx->mail->set(modMail::MAIL_SUBJECT,'Пароль для доступа к практикуму');
$modx->mail->address('to', $useremail);
$modx->mail->setHTML(true);
if (!$modx->mail->send()) {
$modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
}
$modx->mail->reset();
Т.е. он все выполняет до момента отправки письма. Пользователь создан, а пароль ему не отправляется.