簡體   English   中英

向數據庫記錄發送電子郵件時出現Codeigniter錯誤

[英]Codeigniter Error when sending email to database records

我正在嘗試從輸入表單向我的數據庫列表中的多個聯系人發送電子郵件,當我對一個特定的電子郵件地址進行硬編碼時,它可以工作,但是當我嘗試引用我的數據庫時,出現錯誤:

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

我還收到另一個錯誤,我認為這可能只是我的電子郵件配置,我不確定。

無法使用PHP mail()發送電子郵件。 您的服務器可能未配置為使用此方法發送郵件。

我的控制器:

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的幫助將不勝感激

CodeIgniter的電子郵件模塊在to()函數中需要一個電子郵件地址數組 模型的emailsend()函數會向該數組添加emailsend()email索引。 同樣,您在foreach循環的每次迭代中都會覆蓋該email索引的值,這意味着您的數組將僅包含數據庫中的最后一個地址。

看起來您的函數在填充完數組后實際上並沒有返回該數組,但是可能這部分只是在您的問題中被截斷了。

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');
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 dump將始終是一個值,因為u總是重新分配該值,因此將返回一封電子郵件。

我建議像這樣構建數組

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

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

然后,朝聖者會像這樣

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"
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM