我想知道这个人是否阅读了邮件。 如果有人单击邮件中的链接,它会很好地工作。 但是我想让它在没有链接的情况下工作,所以我必须添加一个图片<img>
. 但在这种情况下不起作用。
$message = '<p> confirm </p> <img src="'. base_url().'Email/Track_Open_Email/'.$toEmail.'" width="80" height="80" />';
//Email{Controller}/Track_Open_Email{Method}/toEmail{First Param}
电子邮件控制器中的Track_Open_Email
功能
public function Track_Open_Email ($email)
{
$this->Email_model->Set_Track_Open_Email($email , $data);
}// from here will go to Email model
在 CI 中将参数作为 URI 元素传递不会自动将其转换为函数所需的变量。
我建议这个:
public function Track_Open_Email ($email)
{
// this will take https://domain.tld/controller/track_open_email/email_address and
assign email_address to $email:
$email = $this->uri->segment(3);
$this->Email_model->Set_Track_Open_Email($email , $data);
}
请注意,此确切代码需要事先加载 url 帮助程序,并且有一个小警告:由于您只检查电子邮件地址,如果您向同一收件人发送了多封不同的电子邮件,阅读一封会将所有电子邮件标记为已读。
我的建议是在每个不同的邮件上传递另一个参数(例如<img src="'. base_url().'Email/Track_Open_Email/'.$toEmail.'/.$email_id.'" width="80" height="80" />
(,以便通过解析$this->uri->segment(3)
和$this->uri->segment(4)
并将每个分配给单独的值,您只能将该特定邮件标记为已读:
public function Track_Open_Email ($email)
{
// this will take https://domain.tld/controller/track_open_email/email_address/email_id and
assign email_address to $email:
$email = $this->uri->segment(3);
$email_id = $this->uri->segment(4);
// now pass both params to the Set_Track_Open_Email model:
$params = array('email'=>$email, 'email_id'=>$email_id);
$this->Email_model->Set_Track_Open_Email($params , $data);
}
最后,在模型中,使用两个参数运行更新查询(您将以$params['email']
和$params['email_id']
的形式访问它们,并仅标记该特定用户已阅读的特定电子邮件。
为清楚起见:$email_id
应该有一个值,该值唯一标识"广告系列",因为缺少更好的词。因此,如果今天您向所有 10,000 名用户发送一封电子邮件,通知他们某些事情,那么发送的这 10,000 封电子邮件将具有相同的email_id(它可以是任何东西:随机数、带有发送日期的哈希值,或者只要没有其他电子邮件具有相同的任何内容(。如果您明天向用户发送另一封电子邮件,则该电子邮件将具有不同的email_id。 你用它完成了什么?如果我阅读了您的第一封邮件,我只会被标记为已阅读第一封邮件,而不是两者。第二个好处是您可以单独跟踪每封邮件的打开率。