Codeigniter $ this-> email-> send () не работает, пока mail () делает

Я не могу понять, почему, если я пытаюсь использовать класс электронной почты CI, он не отправляет электронные письма, а если я использую собственный класс PHP mail ().

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

Я попытался выяснить, как его настроить, но … ничего …

Следующий код контроллера:

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 } 

Используйте эту электронную почту настройки ..

 $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(); 

Я столкнулся с этой проблемой и нашел следующее решение. Просто небольшое изменение в конфигурации электронной почты и работает 100%:

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

Руководство пользователя Codeigniter: http://ellislab.com/codeigniter/user-guide/libraries/email.html

Эта настройка работает для меня:

 $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(); } 

После борьбы с этой же проблемой в течение пары часов я, наконец, решил изменить свой конфиг для отправки через другой сервер. Мой исходный сервер по какой-то причине отправил бы на некоторые адреса, но не на другие (в том же домене). Как только я перешел на sendgrid, он работал так, как ожидалось.

Если вы не получаете ожидаемых результатов, попробуйте другой SMTP-сервер. Проблема может не быть вашим кодом …

У меня была такая же проблема, и я пытаюсь использовать код ниже, чем почтовая функция Codeignitor.

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

Он работает, и почта отправляется на адрес электронной почты. Эта почта отправила уже созданный адрес электронной почты (как я думаю). В моем случае это:

 gtt28651ff@p3plcpnl0552.srod.ahx3.domainserver.com 

Поэтому я копирую этот адрес электронной почты и пробую его с помощью кода ниже.

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

И это нормально. Кажется, что некоторые серверы уже создали электронный адрес для отправки электронной почты, а другие НЕ.

Надеюсь, это ясно и полезно.