将电子邮件发送到数据库记录时Codeigniter错误

时间:2018-03-14 18:20:54

标签: php mysql database codeigniter email

我正在尝试从输入表单向我的数据库列表中的多个联系人发送电子邮件,当我对特定电子邮件地址进行硬编码时它会起作用,但是当我尝试引用我的数据库时,我收到错误:

消息:mail():SMTP服务器响应:503 5.0.0需要RCPT(收件人) 文件名:libraries / Email.php

我还得到另一个错误,我认为可能只是我的电子邮件配置,我不确定它;

无法使用PHP mail()发送电子邮件。您的服务器可能未配置为使用此方法发送邮件。

MY Controller:

public function sendmail() {
$this->load->library('email');
$this->load->model('Email_model');
$this->load->library('session');

$this->email->from($this->input->post('email'), $this->input->post('name'));

$sendTo['email'] = $this->Email_model->emailsend();

$this->email->to($sendTo);
$this->email->subject('Hello This is an email');

$this->email->message($this->input->post('message'));



if ($this->email->send()){
$this->session->set_flashdata('success','Email has been sent');
redirect('dashboard');
}else{


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

}

我的模特

class Email_model extends CI_Model {


public function emailsend() {

  $query = $this->db->query("SELECT email from contacts");
  $sendTo=array();
  foreach ($query->result() as $row) 
  {
      $sendTo['email']=$row->email; 
  }

我的观点

<form action="<?php echo site_url('/Dashboard/sendmail');?>" method="post" accept-charset="utf-8">

<?php echo form_open('/Dashboard/sendmail');?>

  <label for="name">Your Name</label><input id="name" type="text" name="name">

  <label for="email">Your Email</label><input id="email" type="text" name="email">

  <label for="message">Your Message</label>
  <textarea id="message" name="message" rows="8" cols="50"></textarea>

  <input id-"submit" type="submit" name="submit" value="submit">
<?php echo form_close(); ?>

<p><?php echo $flash;?></p>

任何对errpr的帮助都将受到大力赞赏

2 个答案:

答案 0 :(得分:4)

CodeIgniter的电子邮件模块需要to()函数中的an array of email addresses。您的模型的emailsend()函数会向该数组添加email索引,这是不期望的。此外,您在email循环的每次迭代时都覆盖了foreach索引的值,这意味着您的数组将只包含数据库中的最后一个地址。

看起来你的函数在填充之后实际上并没有返回数组,但可能是这个部分在你的问题中被截断了。

public function emailsend() {

    $query = $this->db->query("SELECT email from contacts");
    $sendTo=array();
    foreach ($query->result() as $row) 
    {
        $sendTo[] = $row->email;
        //     ^^ remove the 'email' index
    }

    return $sendTo; // <-- add this line if you don't have it
}

然后,从控制器中,除非要在其上执行一些额外的逻辑,否则不需要将结果存储在单独的变量中。你可以这样做:

$this->email->from($this->input->post('email'), $this->input->post('name'));
$this->email->to($this->Email_model->emailsend());
$this->email->subject('Hello This is an email');

答案 1 :(得分:2)

public function emailsend() {
   $query = $this->db->query("SELECT email from contacts");
   $sendTo=array();
   foreach ($query->result() as $row) 
   {
      //u are not changing the key
      $sendTo['email']=$row->email; 
   }
   //iguess u are returning 
   return $sendTo;

}

我的意思是该数组上的var转储总是一个值,因为你总是重新设置值,然后会返回一封电子邮件。

我建议像这样构建数组

foreach ($query->result() as $row) 
   {

      $sendTo[]=$row->email;        
   }

然后vardump看起来像这样

array(11) {
 [0]=>
 string(15) "email0@mail.com"
 [1]=>
 string(15) "email1@mail.com"
 [2]=>
 string(15) "email2@mail.com"
  [3]=>
  string(15) "email3@mail.com"
  [4]=>
  string(15) "email4@mail.com"
  [5]=>
  string(15) "email5@mail.com"
  [6]=>
  string(15) "email6@mail.com"
  [7]=>
  string(15) "email7@mail.com"
  [8]=>
  string(15) "email8@mail.com"
  [9]=>
  string(15) "email9@mail.com"
  [10]=>
  string(16) "email10@mail.com"
}