У меня никогда раньше не было проблем с отправкой писем через 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');
К сожалению, это не сработало.






Надеюсь, что это поможет вам :
Вам не хватает $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
ошибок нет, отправка прошла успешно, но тело все еще пустое.
что вы получаете, когда echo $body; die;
В инструментах chrome dev я могу видеть визуализированный HTML, когда я повторяю тело. Так что, похоже, этот кусок работает правильно.
хорошо, попробуйте добавить этот $ci->email->set_mailtype("html"); перед $ci->email->to($to);
это сработало! Я не могу в это поверить! Почему бы не работать при установке mailtype в массиве конфигурации, но он работал бы напрямую ?? Может, ошибка в почтовом классе CI?
не уверен, что это ошибка, но может быть зависит от среды версии ci, обновлен мой ответ,
Если мой ответ поможет вам, пожалуйста, не стесняйтесь пометить его как зеленый и проголосовать также
попробуйте без doctype и, в конечном итоге, тег заголовка