Codeigniter $this->email->send() not working while

2019-01-25 10:36发布

问题:

I can't figure out why if I try to use the CI Email Class it doesn't send emails, while if I use the native PHP mail() Class works.

Has to be noted that sometimes I get "email sent" while is not actually sent and sometimes I get the error "my server is not setup".

I tried to figure out how to set it up but... nothing...

Controller code follows:

 if($this->form_validation->run()){

                //Set Language
                $this->lang->load('site', $this->session->userdata('lang'));

                //Random key
                $user_valid_key = md5(uniqid());

                //Prepare email
                $this->load->library('email', array('mailtype' => 'html'));
                $this->email->from($this->config->item('email_signup_from'), 'Wondermark.net');
                $this->email->to($this->input->post('email'));
                $this->email->subject($this->lang->line('email_signup_subject'));

                //Format mail con %s per inserire i campi necessari
                $signup_msg = sprintf($this->lang->line('email_signup_message'), $this->input->post('fname'), base_url().'main/signup_confirm/'.$user_valid_key);

                $this->email->message((string)$signup_msg);

                if($this->email->send()){
                    //TODO: load view...
                    echo "email sent";
                }else{
                    $to = $this->input->post('email');
                    mail($to, 'test', 'Other sent option failed');
                    echo $this->input->post('email');
                    show_error($this->email->print_debugger());
                }

                //TODO: Add to db

            }else{

            // Form validation failed

}

回答1:

Use this setup email..

$this->load->library('email');

$config['protocol']    = 'smtp';

$config['smtp_host']    = 'ssl://smtp.gmail.com';

$config['smtp_port']    = '465';

$config['smtp_timeout'] = '7';

$config['smtp_user']    = 'sender_mailid@gmail.com';

$config['smtp_pass']    = 'password';

$config['charset']    = 'utf-8';

$config['newline']    = "\r\n";

$config['mailtype'] = 'text'; // or html

$config['validation'] = TRUE; // bool whether to validate email or not      

$this->email->initialize($config);


$this->email->from('sender_mailid@gmail.com', 'sender_name');
$this->email->to('recipient@gmail.com'); 


$this->email->subject('Email Test');

$this->email->message('Testing the email class.');  

$this->email->send();

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


回答2:

I faced this problem and found the following solution. Just a little change in the email config and it's working 100%:

$config['protocol'] = 'ssmtp';
$config['smtp_host'] = 'ssl://ssmtp.gmail.com';


回答3:

Codeigniter User Guide: https://www.codeigniter.com/user_guide/libraries/email.html

This setup works for me:

$config = Array(
            'protocol' => 'smtp',
            'smtp_host' => 'Your SMTP Server',
            'smtp_port' => 25,
            'smtp_user' => 'Your SMTP User',
            'smtp_pass' => 'Your SMTP Pass',
            'mailtype'  => 'html'
            );
$this->load->library('email', $config);
$this->email->set_newline("\r\n");

//Add file directory if you need to attach a file
$this->email->attach($file_dir_name);

$this->email->from('Sending Email', 'Sending Name');
$this->email->to('Recieving Email address'); 

$this->email->subject('Email Subject');
$this->email->message('Email Message'); 

if($this->email->send()){
   //Success email Sent
   echo $this->email->print_debugger();
}else{
   //Email Failed To Send
   echo $this->email->print_debugger();
}


回答4:

After fighting with this same problem for a couple hours I finally decided to change my config to send through a different server. My original server for some reason would send to some addresses but not others (in same domain). As soon as I changed to sendgrid it worked as expected.

If you are not getting the results you expect, try a different smtp server. The problem may not be your code...



回答5:

I had the same problem and I try below code instead of Codeignitor's mail function.

mail('mypersonalmail@domainserver.com' , 'Test', 'Test Email');

It works and mail is send to the email address. That mail has sent by already created email address (As i think). In my case it is:

gtt28651ff@p3plcpnl0552.srod.ahx3.domainserver.com

So I copy this email address and try it with below code.

$this->email->from('gtt28651ff@p3plcpnl0552.srod.ahx3.domainserver.com', 'www.domainserver.com');

And it work fine. It seems to be some servers need already created email address to send the email while others are NOT.

Hope this is clear and helpful.