CodeIgniter邮件无法在服务器上运行,但工作正常localhost

时间:2016-12-20 15:28:45

标签: php codeigniter email

我正在使用共享主机方案。我尝试了我的水平,但我无法解决这个问题。 这是我的代码。我首先尝试使用gmail但是没有工作然后我读到某个地方可能我的共享主机方案的IP被谷歌列入黑名单然后我累了我自己的smtp然后imap服务器,相同的结果它在localhost上正常工作但我又得到了同样的错误。

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

class Contact extends CI_Controller {

    /**
     * Index Page for this controller.
     *
     * Maps to the following URL
     *      http://example.com/index.php/welcome
     *  - or -  
     *      http://example.com/index.php/welcome/index
     *  - or -
     * Since this controller is set as the default controller in 
     * config/routes.php, it's displayed at http://example.com/
     *
     * So any other public methods not prefixed with an underscore will
     * map to /index.php/welcome/<method_name>
     * @see http://codeigniter.com/user_guide/general/urls.html
     */
    public function __construct()
    {
        parent::__construct();   
        $this->load->helper(array('form','url'));
        $this->load->library(array('session', 'form_validation', 'email'));
    }   
    public function index()
    {
        $this->load->helper('security');
        //set validation rules
        $this->form_validation->set_rules('name', 'Name', 'trim|required|xss_clean|callback_alpha_space_only');
        $this->form_validation->set_rules('email', 'Emaid ID', 'trim|required|valid_email');
        $this->form_validation->set_rules('subject', 'Subject', 'trim|required|xss_clean');
        $this->form_validation->set_rules('message', 'Message', 'trim|required|xss_clean');

        //run validation on form input
        if ($this->form_validation->run() == FALSE)
        {
            //validation fails
        $this->load->view('head');
        $this->load->view('map');
        $this->load->view('footer_map');
        }

        else
        {
            //get the form data
            $name = $this->input->post('name');
            $from_email = $this->input->post('email');
            $subject = $this->input->post('subject');
            $message = $this->input->post('message');

            //set to_email id to which you want to receive mails
            $to_email = 'example@gmail.com';

            //configure email settings
            $config['protocol'] = 'imap';
            $config['smtp_host'] = 'imap.example.com';
            $config['smtp_port'] = '587';
            $config['smtp_user'] = 'info@exampl.com';
            $config['smtp_pass'] = 'example';
            $config['mailtype'] = 'html';
            $config['charset'] = 'iso-8859-1';
            $config['wordwrap'] = TRUE;
            $config['newline'] = "\r\n"; //use double quotes
           // $this->load->library('email', $config);


            $this->email->initialize($config); 
            //send mail
            $this->email->from($from_email, $name);
            $this->email->to($to_email);
            $this->email->reply_to($from_email, $name);
            $this->email->subject($subject);
            $this->email->message($message);


            if ($this->email->send())
            {
                // mail sent
                $this->session->set_flashdata('msg','<div class="alert alert-success text-center">Your mail has been sent successfully!</div>');
                redirect('contact/index');
            }
            else
            {
                //error
                echo $this->email->print_debugger();
                $this->session->set_flashdata('msg','<div class="alert alert-danger text-center">There is error in sending mail! Please try again later</div>');
                redirect('contact/index');
            }
        }

    }
    public function alpha_space_only($str)
    {
        if (!preg_match("/^[a-zA-Z ]+$/",$str))
        {
            $this->form_validation->set_message('alpha_space_only', 'The %s field must contain only alphabets and space');
            return FALSE;
        }
        else
        {
            return TRUE;
        }
    }
}

我得到了这个输出

There is error in sending mail! Please try again later.

帮助我们,我累了

1 个答案:

答案 0 :(得分:0)

在您发布的代码的第73行看起来像

的if语句
$this->email->send()

失败,然后运行:

  else
  {
        //error
        echo $this->email->print_debugger();
        $this->session->set_flashdata('msg','<div class="alert alert-danger text-center">There is error in sending mail! Please try again later</div>');
        redirect('contact/index');
  }

我会检查Email.php中的配置 - 在我的Codeigniter 3项目中,它位于:

html/system/libraries/Email.php

this Codeigniter 3 API页面的底部是有关print_debugger和电子邮件库的一些信息。它应该可以帮助你找到正确的方向。