DanArst
@DanArst
Э, Ойboy!

Почему не отправляется письмо на почту?

Здравствуйте!

На небольшом сайте на 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();


Т.е. он все выполняет до момента отправки письма. Пользователь создан, а пароль ему не отправляется.
  • Вопрос задан
  • 52 просмотра
Пригласить эксперта
Ответы на вопрос 1
Не работал с модхом, но я бы посоветовал проверить работает ли функция mail()

<?php
$success = mail('example@example.com', 'My Subject', $message);
if (!$success) {
    $errorMessage = error_get_last()['message'];
}
?>


Только вместо адреса - свою почту подставь.

Если не работает - смотри логи. Скорее всего в /var/log/maillog - это файл.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
LAPTOP.RU Москва
от 150 000 до 190 000 ₽
LAPTOP.RU Кострома
от 25 000 до 65 000 ₽
LAPTOP.RU Москва
от 130 000 до 170 000 ₽