【问题标题】:Codeigniter Error when sending email to database records向数据库记录发送电子邮件时出现 Codeigniter 错误
【发布时间】:2018-08-23 10:00:48
【问题描述】:

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

消息: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 的任何帮助都将不胜感激

【问题讨论】:

  • 查看您上一个问题的答案:stackoverflow.com/a/49266032/2275490
  • 您的模型的emailsend() 函数出现截断。填写$sendTo数组后,它真的返回了一个电子邮件地址吗?
  • @rickdenhaan 是的,数据库中有多封电子邮件......而 Vickel 这些是上一个问题中没有提到的错误......
  • @rickdenhaan 当我 var_dump 结果我得到正确的回报

标签: php mysql database codeigniter email


【解决方案1】:

CodeIgniter 的电子邮件模块在 to() 函数中需要 an array of email addresses。您的模型的 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');

【讨论】:

  • 你是对的,这已经消除了所有错误,但是是的,这段代码将它发送到数据库中的最后一封电子邮件,我该如何避免这种情况?
  • @Jim123 你把括号留在$sendTo[] = $row-&gt;email;了吗?
  • 这就是我拥有它的方式; foreach ($query->result() as $row) //循环构建数组 { $sendTo[]=$row->email; //添加到数组 } return $sendTo;
  • 那应该可以了。如果你在var_dump($sendTo) 之前return,它包含多少个地址?你的contacts 表中有多少个地址?
  • 该死!花了很长时间写答案:(
【解决方案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"
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-17
    • 2016-05-06
    • 2013-11-24
    • 2015-12-28
    • 2012-11-21
    • 2012-12-12
    相关资源
    最近更新 更多