【问题标题】:Codeigniter cannot sent email to address stored in databaseCodeigniter 无法向存储在数据库中的地址发送电子邮件
【发布时间】:2020-12-16 03:26:01
【问题描述】:

我在使用静态电子邮件地址时已经尝试过了。但是,当我想发送存储在数据库中的电子邮件时,它不起作用。

这是我的代码:

//email.php
function sentmail($value='')
{
  $message = $this->load->view('templates/email',$value,TRUE);
  $config = array(
      'protocol' => 'smtp',
      'smtp_host' => 'mail.mail.co.id',
      'smtp_port' => 26,
      'smtp_user' => 'mail@mail.com ',
      'smtp_pass' => 'password',
      'mailtype' => 'html',
      'crlf' => "\r\n",
      'newline' => "\r\n"
    );
    $this->email->initialize($config);
    $this->email->set_newline("\r\n");
    $this->email->from($config['smtp_user']);
    $this->email->to($email);
    $this->email->subject('Email');
    $this->email->message($message);
    if($this->email->send())
  {
    echo "Email sudah terkirim.";
  }
 else
 {
     echo "Email gagal terkirim.";
     $this->email->print_debugger();
   }
}

//email_model.php
 function get_email()
  {
    $this->db->select('email');
    $this->db->from('tb_email');
    $this->db->order_by('id_email','DESC');
    $this->db->limit(1);
    $query = $this->db->get();
    return $query->result();
  }

这是我的桌子的样子

tb_email
  id_email nama       email       
  1        Adam       x@mail.com  
  2        Philipp    y@mail.com 

终于找到问题了

当我再次尝试解决这个问题时,我发现我的问题实际上是 preg_match() 期望参数 2 是字符串,给定数组。

这是我的代码:

\\email.php
function process($id_email)//proses input email
{
    $email = $this->email_model->get_email();
    $where = array('id_email' => $id_email);
    $data['query_added'] = $this->email_model->latest_email($where,'tb_email');
    //var_dump($data);
    var_dump($email,$data);
    $this->sentmail($data);
    //$this->session->set_flashdata('input_success','<div class="alert alert-success" role="alert">Input sudah dibuat.</div>');
    //redirect('email');
}

而错误结果是:

遇到了 PHP 错误

严重性:警告

消息:preg_match() 期望参数 2 是字符串,给定数组

文件名:libraries/Email.php

行号:1070

回溯:

文件:C:\xampp\htdocs\projek\application\controllers\Email.php 线路:150 功能:到

文件:C:\xampp\htdocs\projek\application\controllers\Email.php 线路:128 功能:发送邮件

文件:C:\xampp\htdocs\projek\index.php 线路:315 函数:require_once

【问题讨论】:

  • 请像这样更改您的模型代码 $query = $this->db->get();返回 $query->row()->email;再试一次
  • 感谢您的帮助,但仍然无法正常工作
  • @mickmackusa 这就是我感到困惑的原因。我没有使用 preg_match() 但错误找到了它。但是根据错误信息,这个问题是因为$this-&gt;email-&gt;to()在函数sentmail
  • @mickmackusa 我从不更改库中的任何内容。
  • 您的意思是使用$id_email 从表中获取电子邮件地址吗?现在,您正在获取最后一个条目,而与 ID 无关。

标签: php codeigniter email


【解决方案1】:

我对这些方法有很多不理解/不喜欢的地方,但我很清楚:

$email = $this->email_model->get_email();

正在返回一个对象数组。

要将$email 设置为生成结果集第一行中email 列的字符串值,可以使用以下命令:

$email = $this->email_model->get_email()[0]->email;

但是对于只从单行返回一个值的方法,方法名称应该是getLastEmailAddress(),它应该返回一个字符串。方法结束:

return $this->db->get()->row()->email;

控制器声明应如下所示:

$email = $this->email_model->getLastEmailAddress();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 2016-05-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多