Codeigniter $this->email->send() 不工作,而 mail() 工作

新手上路,请多包涵

我不知道为什么如果我尝试使用 CI 电子邮件类它不发送电子邮件,而如果我使用原生 PHP 邮件()类可以工作。

必须注意,有时我收到“已发送电子邮件”,而实际上并未发送,有时我收到错误消息“我的服务器未设置”。

我试图弄清楚如何设置它,但……没有……

控制器代码如下:

  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

}

原文由 Mr.Web 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

使用此设置电子邮件..

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

原文由 Anand 发布,翻译遵循 CC BY-SA 4.0 许可协议

最近,由于安全检查,通过 Google SMTP 发送电子邮件可能非常棘手。

验证是否:

  1. 您的服务器上 有 rDNS ,它与您的服务器 IP 匹配
  2. 在您用来发送电子邮件的电子邮件上 禁用两步验证(在 Google 设置中)
  3. 在您用来发送电子邮件的电子邮件上 启用 IMAP 和 POP (在 Google 设置中)
  4. 允许在您用来发送电子邮件的电子邮件上使用不太安全的应用程序(在 Google 设置中)

按如下方式更改 CI 设置:

     //Google settings for CI
    $config['protocol'] = 'ssmtp'; //smtp not working
    $config['smtp_host'] = 'ssl://ssmtp.gmail.com'; //notice ssmtp
    $config['smtp_user'] = 'anyemail@server.com'; //must use Google
    $config['smtp_pass'] = '***********';
    $config['smtp_port'] = '465';
    $config['smtp_crypto'] = 'ssl';

    //general settings
    $config['_smtp_auth'] = TRUE; //important
    $config['smtp_timeout'] = 30;
    $config['charset'] = 'utf-8';
    $config['mailtype'] = 'html';
    //optional
    $config['wrapchars'] = 76;
    $config['wordwrap'] = TRUE;

我希望这可以节省我在这个问题上苦苦挣扎的 2 天。

原文由 Adrian P. 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题