0
votes

Recently moved an existing CodeIgniter product to its own VPS, everything is working away. However, for some reason a password has been invalidated and when the forgot_password function is run the email arrives with an intact subject line, however, the emails have no content. At all. This is the offending code:

function _send_email($type, $email, &$data) {
        $this->load->library('email');
        $this->email->from($this->config->item('webmaster_email', 'tank_auth'), $this->config->item('website_name', 'tank_auth'));
        $this->email->reply_to($this->config->item('webmaster_email', 'tank_auth'), $this->config->item('website_name', 'tank_auth'));
        $this->email->to($email);
        $this->email->subject(sprintf($this->lang->line('auth_subject_' . $type), $this->config->item('website_name', 'tank_auth')));
        $this->email->message($this->load->view('email/' . $type . '-html', $data, TRUE));

    echo $this->load->view('email/' . $type . '-html', $data, TRUE);

        $this->email->set_alt_message($this->load->view('email/' . $type . '-txt', $data, TRUE));
        $this->email->send();
    }

I wrote a short PHP script to send an email using the same CodeIgniter library:

<?php

if(!defined('BASEPATH')) exit('No direct script access allowed');

class EmailTest extends CI_Controller{

    function __construct(){
        parent::__construct();
        $this->load->helper(array('form', 'url'));
        $this->load->library('form_validation');
        $this->load->library('tank_auth');
        $this->lang->load('tank_auth');
    }

    function sendTest(){
        $this->load->library('email');
        $this->email->from($this->config->item('webmaster_email', 'tank_auth'), $this->config->item('website_name', 'tank_auth'));
        //$this->email->reply_to($this->config->item('webmaster_email', 'tank_auth'), $this->config->item('website_name', 'tank_auth'));


        $this->email->to('[email protected]');
        $this->email->subject("Here and There");
        $this->email->message("I hear you are an example");
        $this->email->send();

        echo $this->email->print_debugger();
    }
}
?>

That email lands completely fine, and produces this output:

User-Agent: CodeIgniter
Date: Mon, 14 Apr 2014 18:55:55 +1000
From: "EPI Dashboard" <[email protected]>
Return-Path: <[email protected]>
Reply-To: "[email protected]" <[email protected]>
X-Sender: [email protected]
X-Mailer: CodeIgniter
X-Priority: 3 (Normal)
Message-ID: <[email protected]>
Mime-Version: 1.0
Content-Type: multipart/alternative; boundary="B_ALT_534ba29b8708b"


=?utf-8?Q?Here_and_There?=
This is a multi-part message in MIME format.
Your email application may not support this format.

--B_ALT_534ba29b8708b
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

I hear you are an example


--B_ALT_534ba29b8708b
Content-Type: text/html; charset=utf-8
Content-Transfer-Encoding: quoted-printable

I hear you are an example

--B_ALT_534ba29b8708b--

The server is a CentOS 6 VPS running postfix and obviously PHP/MySql/Apache.

Any thoughts on what to check or any resources that you can think of would be greatly appreciated.

1

1 Answers

0
votes

The PHP.INI file for this server need to have the line:

sendmail_path = /usr/sbin/sendmail -t -i

Which fixed the problem instantly. Not entirely sure as to why parts of the email were showing up and not the body, but it works.