You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用CodeIgniter邮件库向数据库联系人列表发送邮件?

嘿,作为CodeIgniter新手能想到从数据库批量发邮件,这点超棒!完全可以实现,而且用模型来处理数据库操作是CI推荐的最佳实践,代码会更整洁好维护。我给你一步步拆解怎么做:

第一步:创建联系人模型(推荐做法)

首先我们建一个专门处理联系人数据的模型,这样数据库操作和业务逻辑分开,符合MVC的设计思路。

在application/models/目录下新建Contacts_model.php,代码如下:

<?php
class Contacts_model extends CI_Model {

    public function __construct() {
        parent::__construct();
        $this->load->database(); // 加载数据库连接
    }

    // 获取所有联系人的邮箱地址,返回二维数组(每个元素含email字段)
    public function get_all_contacts_emails() {
        $this->db->select('email');
        $query = $this->db->get('contacts');
        
        return $query->result_array();
    }
}
第二步:配置邮件类

CodeIgniter的邮件类可以全局配置,也可以在控制器里动态配置。新手可以先试试动态配置,测试没问题再写到全局配置文件里。

方式1:控制器内动态配置

在你要发送邮件的控制器里,加载邮件库并配置:

// 加载邮件库
$this->load->library('email');

// 邮件配置(根据你的邮件服务商调整,比如Gmail、阿里云邮箱等)
$config = array(
    'protocol' => 'smtp', // 推荐用SMTP协议,稳定性更高
    'smtp_host' => 'smtp.example.com', // 你的SMTP服务器地址
    'smtp_port' => 587, // SMTP端口,常见的是587或465
    'smtp_user' => 'your_email@example.com', // 发件人邮箱
    'smtp_pass' => 'your_email_auth_code', // 邮箱授权码(很多邮箱需要用授权码代替密码)
    'mailtype' => 'html', // 支持HTML格式邮件
    'charset' => 'utf-8',
    'newline' => "\r\n" // 必须用这个换行符,避免发送失败
);

// 初始化配置
$this->email->initialize($config);

方式2:全局配置(更方便)

直接在application/config/email.php里填写上述配置,之后控制器里只需要加载邮件库就行,不用每次都写配置。

第三步:获取邮箱列表并发送邮件

现在我们在控制器里调用模型拿到邮箱,然后发送邮件。这里分两种常用场景:

场景1:给每个收件人发送个性化邮件(比如带对方名字)

如果需要给每个联系人发不同内容的邮件,就循环逐个发送:

// 加载模型
$this->load->model('contacts_model');

// 获取所有联系人数据
$contacts = $this->contacts_model->get_all_contacts_emails();

// 循环发送
foreach ($contacts as $contact) {
    $email = $contact['email'];
    
    $this->email->clear(); // 每次循环要清空之前的邮件设置
    $this->email->from('your_email@example.com', '你的名字');
    $this->email->to($email);
    $this->email->subject('专属你的邮件标题');
    $this->email->message("嗨,这是给你的专属邮件内容!");
    
    // 发送邮件并处理结果
    if (!$this->email->send()) {
        echo '发送给' . $email . '失败:' . $this->email->print_debugger();
    } else {
        echo '发送给' . $email . '成功!';
    }
}

场景2:发送统一内容的批量邮件(隐藏收件人)

如果所有收件人内容一样,不想让他们看到彼此的邮箱,用**BCC(密送)**更合适,只需要发送一次:

// 加载模型
$this->load->model('contacts_model');

// 获取所有联系人邮箱,转换成一维数组(只保留邮箱字符串)
$contacts = $this->contacts_model->get_all_contacts_emails();
$email_list = array_column($contacts, 'email');

// 设置邮件内容
$this->email->clear();
$this->email->from('your_email@example.com', '你的名字');
$this->email->bcc($email_list); // 用密送,所有收件人看不到彼此邮箱
$this->email->subject('批量邮件标题');
$this->email->message('这是给所有联系人的统一邮件内容');

// 发送邮件并处理结果
if ($this->email->send()) {
    echo '批量邮件发送成功!';
} else {
    echo '发送失败:' . $this->email->print_debugger();
}
新手注意事项
  • 测试阶段先只取少量邮箱(比如在模型里加$this->db->limit(5);),避免触发邮件服务商的发送限制,被当成垃圾邮件。
  • 一定要检查SMTP配置是否正确,比如端口、授权码(QQ邮箱、Gmail等都需要用授权码代替登录密码)。
  • 如果发送失败,用$this->email->print_debugger()查看详细错误信息,能快速定位问题。

内容的提问来源于stack exchange,提问作者Jim123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 09:15:34