Я пытаюсь отправить HTML-сообщения электронной почты с помощью класса электронной почты Codeigniter. Вот как я это делаю:
$config = Array( 'protocol' => 'smtp', 'smtp_host' => 'ssl://smtp.googlemail.com', 'smtp_port' => 465, 'smtp_user' => 'a@a.com', 'smtp_pass' => 'password', 'mailtype' => 'html', 'charset' => 'iso-8859-1' ); $this->load->library('email', $config); $this->email->from('b@b.com', 'Me'); $this->email->to($email); $this->email->subject($subject); $this->email->message($html); $this->email->set_newline("\r\n"); if($this->email->send()){ return true; }else{ return false; }
Тем не менее, когда я просматриваю электронную почту в Gmail или Outlook, я вижу, что в верхней части письма отображается текст HTML, а остальная часть сообщения отображается нормально.
Вот HTML, который я отправляю, его шаблон, который я нашел для тестирования. Строки с 1 по 19 отображаются как обычный текст и не отображаются.
Так выглядит электронное письмо.
Почему это так?
В качестве краткого изложения нашего разговора в комментариях вопроса проблема представляет собой содержимое переменной $html
. Переменная содержит объект, закодированный в HTML. Запуск его через html_entity_decode
решил проблему.
HTML-код, который не отображается, кажется заголовком вашего шаблона. Возможно, Gmail отобразит только код, найденный внутри body
тега, поскольку Gmail – это веб-приложение, поэтому оно отображается на веб-странице, уже содержащей заголовок и тело ( <html><head><body>
).