Библиотека электронной почты Codeigniter, отправляющая пустые электронные письма или исходный код html

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

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

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

Это мой email_helper.php

<?php defined('BASEPATH') OR exit('No direct script access allowed');

function send_email($to, $subject, $template)
{
    $ci = &get_instance();
    $ci->load->library('email');

    $config = array(
      'mailtype'  => 'html',
      'newline' => '\r\n',
      'crlf'  => '\r\n'
    );

    //If I comment out this line, it sends raw HTML, otherwise it sends a blank body.
    $ci->email->initialize($config);

    $ci->email->from($ci->config->item('from_email_address'), $ci->config->item('from_email_name'));
    $ci->email->reply_to($ci->config->item('from_email_address'), $ci->config->item('from_email_name'));
    $ci->email->to($to);

    $ci->email->subject($subject);
    $ci->email->message($ci->load->view('email/' . $template . '_html', $data, TRUE));
    $ci->email->send();
}

это мой test_html.php

<!DOCTYPE html>
<html>
  <head><title>Test</title></head>
  <body>
      <div style = "max-width: 800px; margin: 0; padding: 30px 0;">
       TEST!
      </div>
  </body>
</html>

А затем я вызываю помощника по электронной почте со своего контроллера со следующим:

$this->load->helper('email_helper');
send_email($this->input->post('email'), 'Test Subject', 'test');

попробуйте без doctype и, в конечном итоге, тег заголовка

Vickel 22.07.2018 01:00

К сожалению, это не сработало.

hyphen 22.07.2018 13:31
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
2
687
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Надеюсь, что это поможет вам :

Вам не хватает $data в разделе просмотра нагрузки, а также попробуйте использовать $ci->load->library('email', $config); вместо $ci->email->initialize($config);.

send_email должен быть таким:

function send_email($to, $subject, $template)
{
    $ci = & get_instance();

    $config = array(
      'mailtype'  => 'html',
      'charset' => 'iso-8859-1',
      'newline' => '\r\n',
      'crlf'  => '\r\n'
    );

    $data = '';

    $body = $ci->load->view('email/' . $template . '_html', $data, TRUE);
    echo $body; die;

    $ci->load->library('email', $config);
    $ci->email->set_mailtype("html");
    $ci->email->from($ci->config->item('from_email_address'), $ci->config->item('from_email_name'));
    $ci->email->reply_to($ci->config->item('from_email_address'), $ci->config->item('from_email_name'));
    if ($to) 
    {
      $ci->email->to($to);

      $ci->email->subject($subject);
      $ci->email->message($body);
      if ($ci->email->send())
      {
        return TRUE;
      }
      else
      {
        echo $ci->email->print_debugger();die;
      }
    }
}

Подробнее: https://www.codeigniter.com/user_guide/libraries/email.html

ошибок нет, отправка прошла успешно, но тело все еще пустое.

hyphen 22.07.2018 13:54

что вы получаете, когда echo $body; die;

Pradeep 22.07.2018 13:57

В инструментах chrome dev я могу видеть визуализированный HTML, когда я повторяю тело. Так что, похоже, этот кусок работает правильно.

hyphen 22.07.2018 14:19

хорошо, попробуйте добавить этот $ci->email->set_mailtype("html"); перед $ci->email->to($to);

Pradeep 22.07.2018 14:35

это сработало! Я не могу в это поверить! Почему бы не работать при установке mailtype в массиве конфигурации, но он работал бы напрямую ?? Может, ошибка в почтовом классе CI?

hyphen 22.07.2018 14:38

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

Pradeep 22.07.2018 14:42

Если мой ответ поможет вам, пожалуйста, не стесняйтесь пометить его как зеленый и проголосовать также

Pradeep 22.07.2018 14:47

Другие вопросы по теме