1

因此,我的任务是为我们的会员数据库创建一个功能,该功能将每月提醒某人他们的会员资格何时到期。如果一个人的会员资格到期时间不超过 6 个月,我们会发送一封电子邮件,如果他们的会员资格到期 3 个月,我们会发送另一封电子邮件。没有大喊大叫。我首先创建一个这样的模型:

class Email extends CI_Model {

function __construct()
{
    parent::__construct();
}

// -----------------EMAIL-----------------
function emailMessage($message = 1,$recipient = 1777) { // Default "Test" Numbers
    $rInfo = $this->db->query("SELECT * FROM Members WHERE intKey = " . $recipient)->row();
    $eInfo = $this->db->query("SELECT * FROM Emails WHERE intKey = " . $message)->row(); 

    // Replacements?
    $bodyCopy = $eInfo->txtEmail;
    $bodyCopy = str_replace("[firstname]",$rInfo->strFirstName,$bodyCopy);  

    $this->load->library('email');
    $this->email->from('someone@example.com','John Q Public');
    $this->email->to($rInfo->strEmail); 
    $this->email->subject($eInfo->strTitle);
    $this->email->message($bodyCopy);
    $this->email->send();
    $this->email->clear();
}
}

一切都很好,当我从我建立的网站的任何其他部分调用这个模型时,它工作正常。这是处理必须发送给我们选区的任何股票电子邮件的好方法。通常,它在代码中是这样的:

$this->load->model('email');
$this->email->emailMessage(8,$this->session->userdata('memberKey'));

奇迹般有效。我以前使用它的地方和现在使用它的地方之间的最大区别是我将对模型的调用包含在一个循环中,如下所示:

public function warningEmails() {
    $this->load->model('email');
    $sql = 'SELECT
                *, FLOOR(
                    DATEDIFF(dtAccreditationEnd, now())/ 30
                )AS diff
            FROM
                tblMembers
            WHERE
                enmAccredited = "yes"
            AND dtAccreditationEnd < DATE_ADD(now(), INTERVAL 6 MONTH)
            ORDER BY
                diff
    ';  
    $emailSend = $this->db->query($sql);
    foreach ($emailSend->result() as $row) {
        if ($row->diff <= 3) {
            $letter = 10;
        } else {
            $letter = 9;
        }
        $this->email->emailMessage($letter,$row->intMembersKey);
    }
}

它在第一次循环中运行良好,并且在循环的下一次迭代中失败并显示以下消息:

致命错误:在第1033行的/home/contract/public_html/members/application/controllers/staff.php中调用未定义的方法 CI_Email::emailMessage()

第 1033 行是这一行:

  $this->email->emailMessage($letter,$row->intMembersKey);

我有一个问题,这个模型只能在给定的实例中调用一次?我究竟做错了什么?预先感谢您的协助!

编辑:我要添加一个 var_dump($this->email); 看看它可能是什么......

object(CI_Email)#30 (46) { ["useragent"]=> string(11) "CodeIgniter" ["mailpath"]=> string(18) "/usr/sbin/sendmail"
["protocol"]=>字符串(4)“邮件”[“smtp_host”]=>字符串(0)“
”[“smtp_user”]=>字符串(0)“”[“smtp_pass”]=>字符串(0)“”
[“smtp_port” ]=> string(2) "25" ["smtp_timeout"]=> int(5)
["smtp_crypto"]=> string(0) "" ["wordwrap"]=> bool(true)
["wrapchars"] => string(2) "76" ["mailtype"]=> string(4) "text"
["charset"]=> string(5) "utf-8" ["multipart"]=> string(5) "mixed" ["alt_message"]=> string(0) "" ["validate"]=>
bool(false) ["priority"]=> string(1) "3" ["newline"]=>
字符串(1) " " ["crlf"]=> 字符串(1) " " ["send_multipart"]=>
bool(true) ["bcc_batch_mode"]=> bool(false) ["bcc_batch_size"]=> int(200) ["_safe_mode"]=> bool(false) ["_subject"]=> string(0) "" [“_body”]=> 字符串(357)“杰弗里,

这提醒您,您的 PDCA 认证将在 3 个月后到期。访问您的会员仪表板,在您方便的时候查看所有完整和不完整的课程作业。会员仪表板将帮助您完成完成过程。如需更多信息,请通过某人@example.com 或 1-800-555-1212 联系某人。" ["_finalbody"]=> string(0) ""
["_alt_boundary"]=> string(0) "" [ "_atc_boundary"]=> 字符串(0) "" ["_header_str"]=> 字符串(0) "" ["_smtp_connect"]=>
字符串(0) "" ["_encoding"]=> 字符串(4) " 8bit" ["_IP"]=>
bool(false) ["_smtp_auth"]=> bool(false) ["

string(17) "recipient@example.com" ["_cc_array"]=> array(0) { } ["_bcc_array"]=> array(0) { } ["_headers"]=> array(5) { [ "From"]=> string(54) ""Someone Example" " ["Return-Path"]=> string(28) "" ["Cc"]=> string(16) "copy@example.com" [ "Bcc"]=> string(17) "blindcopy@example.com" ["Subject"]=> string(49) "=?utf-8?Q?PDCA_Accreditation_Expiration_Warning?=" } ["_attach_name"]=> 数组(0) { } ["_attach_type"]=> array(0) { } ["_attach_disp"]=> array(0) { } ["_protocols"]=> array(3) { [0]=> string( 4) "邮件“[1]=>字符串(8)“发送邮件”[2]=>字符串(4)“smtp”}[“_base_charsets”]=>数组(2){[0]=>字符串(8)“我们-ascii" [1]=> 字符串(9) "iso-2022-" } ["_bit_depths"]=> 数组(2) { [0]=> 字符串(4) "7bit" [1]=> 字符串( 4)“8bit”}[“_priorities”]=>数组(5){[0]=>字符串(11)“1(最高)”[1]=>字符串(8)“2(高)”[2 ]=> string(10) "3 (Normal)" [3]=> string(7) "4 (Low)" [4]=> string(10) "5 (Lowest)" } }_base_charsets"]=> 数组(2) { [0]=> 字符串(8) "us-ascii" [1]=> 字符串(9) "iso-2022-" } ["_bit_depths"]=> 数组(2 ) { [0]=> string(4) "7bit" [1]=> string(4) "8bit" } ["_priorities"]=> array(5) { [0]=> string(11) "1 (最高)”[1]=> 字符串(8)“2(高)”[2]=> 字符串(10)“3(正常)”[3]=> 字符串(7)“4(低)”[ 4]=> 字符串(10) "5 (最低)" } }_base_charsets"]=> 数组(2) { [0]=> 字符串(8) "us-ascii" [1]=> 字符串(9) "iso-2022-" } ["_bit_depths"]=> 数组(2 ) { [0]=> string(4) "7bit" [1]=> string(4) "8bit" } ["_priorities"]=> array(5) { [0]=> string(11) "1 (最高)”[1]=> 字符串(8)“2(高)”[2]=> 字符串(10)“3(正常)”[3]=> 字符串(7)“4(低)”[ 4]=> 字符串(10) "5 (最低)" } }[1]=> string(4) "8bit" } ["_priorities"]=> array(5) { [0]=> string(11) "1 (最高)" [1]=> string(8) " 2(高)”[2]=>字符串(10)“3(正常)”[3]=>字符串(7)“4(低)”[4]=>字符串(10)“5(最低)” } }[1]=> string(4) "8bit" } ["_priorities"]=> array(5) { [0]=> string(11) "1 (最高)" [1]=> string(8) " 2(高)”[2]=>字符串(10)“3(正常)”[3]=>字符串(7)“4(低)”[4]=>字符串(10)“5(最低)” } }

4

4 回答 4

2

我有类似的症状,但由于不同的问题。我最近通过我选择的编辑器将我的模型文件名从 name_model.php 更改为 Name_model.php,我几乎没有意识到我的编辑器实际上并没有删除旧的 name_model.php 文件,所以有两个文件位于具有相同名称和不同大小写的目录。

我在我的模型中创建了一个新函数,但它正在读取旧模型文件,这让我等了好几个小时,直到我查看了目录中的实际文件。

只需删除旧文件即可解决我的问题。

于 2012-12-02T22:07:03.430 回答
1

也许我误读了这个,但不是这一行: $this->load->library('email');

加载写入此行的电子邮件库?我认为您正在递归地杀死自己。

于 2012-08-27T17:57:34.877 回答
1

尝试通过这样做将官方电子邮件库重命名为另一个,

$this->load->library('email', NULL, 'ci_email');

然后通过这样做访问它,

$this->ci_email->from('someone@example.com','John Q Public');

当前的电子邮件库已覆盖您的电子邮件模型。

于 2012-08-27T18:02:19.707 回答
0

我无法通过自动加载加载我的库类 MbSec{}

$autoload['libraries'] = array('database', 'mbsec');

或控制器中的负载。

$this->load->library('mbsec');

但似乎与 Capitals 合作,这不违反逻辑吗?

$autoload['libraries'] = array('database', 'MbSec');
于 2012-11-10T11:34:59.963 回答