Skip to content

Instantly share code, notes, and snippets.

@snnwolf
Last active June 17, 2020 10:24
Show Gist options
  • Select an option

  • Save snnwolf/f80a659fb4a3dc91b69d52dde69ada8d to your computer and use it in GitHub Desktop.

Select an option

Save snnwolf/f80a659fb4a3dc91b69d52dde69ada8d to your computer and use it in GitHub Desktop.

Revisions

  1. snnwolf revised this gist Jan 23, 2018. 1 changed file with 9 additions and 1 deletion.
    10 changes: 9 additions & 1 deletion sendMail.snippet.php
    Original file line number Diff line number Diff line change
    @@ -6,6 +6,7 @@
    * [$html] отправить в виде html, если не задан, останется текст
    * $address строка адресов через ","
    * $subject
    * [$subject_prefix] префикс для сообщения напр, "[site_name] Вам письмо"
    * $message
    * [$filepath] прикрепить файл, если указан
    * [$filename] имя файла, если указан $filepath
    @@ -15,6 +16,9 @@
    $modx->log(modX::LOG_LEVEL_ERROR,'sendMail: empty address');
    return '[email: noaddress]';
    }
    if (!isset($subject_prefix)) {
    $subject_prefix = sprintf('[%s]', $modx->getOption('site_name'));
    }
    if (empty($subject)) {
    $subject = '[Без темы]';
    }
    @@ -36,7 +40,11 @@
    }

    /*Заголовок сообщения*/
    $modx->mail->set(modMail::MAIL_SUBJECT, $subject);
    $full_subject = $subject;
    if ($subject_prefix) {
    $full_subject = $subject_prefix . " " . $subject;
    }
    $modx->mail->set(modMail::MAIL_SUBJECT, $full_subject);

    /*Подставляем чанк с телом письма (предварительно его нужно создать)*/
    $modx->mail->set(modMail::MAIL_BODY, $message);//$modx->getChunk('myEmailTemplate'));
  2. snnwolf created this gist Jan 23, 2018.
    76 changes: 76 additions & 0 deletions sendMail.snippet.php
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,76 @@
    <?php
    // взято здесь https://ilyaut.ru/reposts/sending-mail-through-modmail/
    /**
    * Перед использованием установить переменные: emailsender, site_name
    * Опции:
    * [$html] отправить в виде html, если не задан, останется текст
    * $address строка адресов через ","
    * $subject
    * $message
    * [$filepath] прикрепить файл, если указан
    * [$filename] имя файла, если указан $filepath
    * [$return] вовзращать результат работы сниппета
    */
    if (empty($address)) {
    $modx->log(modX::LOG_LEVEL_ERROR,'sendMail: empty address');
    return '[email: noaddress]';
    }
    if (empty($subject)) {
    $subject = '[Без темы]';
    }
    if (empty($message)) {
    $message = '[Пустое сообщение]';
    }

    /*Активируем почтовый сервис MODX*/
    $modx->getService('mail', 'mail.modPHPMailer');
    $modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
    $modx->mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));

    /*Адрес получателя нашего письма*/
    $address = explode(',', $address);
    if (is_array($address)) {
    foreach($address as $_) {
    $modx->mail->address('to', trim($_));
    }
    }

    /*Заголовок сообщения*/
    $modx->mail->set(modMail::MAIL_SUBJECT, $subject);

    /*Подставляем чанк с телом письма (предварительно его нужно создать)*/
    $modx->mail->set(modMail::MAIL_BODY, $message);//$modx->getChunk('myEmailTemplate'));

    /*Отправляем*/
    if (!empty($html)) {
    $modx->mail->setHTML(true);
    }

    // с формы:
    // <input id="upfile" type="file" name="photo" value="[[!+fi.photo]]" />
    // в сниппете
    // $file = $_FILES['photo']['tmp_name']; // путь к файлу
    // $name = $_FILES['photo']['name']; // имя файла
    // прикрепляем файл
    if ($filepath) {
    if (!is_file($filepath)) {
    $modx->log(modX::LOG_LEVEL_ERROR, sprintf('sendMail: Файл %s не найден', $filepath));
    } else {
    if (empty($filename)) {
    $filename = 'noname-file';
    }
    $modx->mail->attach($filepath, $filename);
    }
    }

    if (!$modx->mail->send()) {
    //var_dump($modx->mail->mailer->ErrorInfo);
    $modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
    if ($return) {
    return '[email:fail]';
    }
    }
    $modx->mail->reset();
    if ($return) {
    return '[email:ok]';
    }