是否阅读电子邮件 |在 CodeIgniter 中
Read Email or Not | in CodeIgniter
我想知道这个人是否阅读了邮件..
如果人们点击邮件中的 link,效果会很好。
但是我想让它在没有 link 的情况下工作,所以我必须添加一张图片 <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
应该有一个唯一标识 "campaign" 的值,因为缺少更好的词。因此,如果今天您向所有 10,000 个用户发送一封电子邮件,通知他们一些事情,那么发送的这 10,000 封电子邮件将具有相同的 email_id(它可以是任何东西:随机数、带有发送日期的哈希值,或任何只要没有其他电子邮件具有相同的)。如果您明天向您的用户发送另一封电子邮件,该电子邮件将具有不同的 email_id。
你用它完成了什么?如果我阅读了您的第一封邮件,我只会被标记为已阅读第一封邮件,而不是两者。第二个好处是您可以分别跟踪每封邮件的打开率。
我想知道这个人是否阅读了邮件..
如果人们点击邮件中的 link,效果会很好。
但是我想让它在没有 link 的情况下工作,所以我必须添加一张图片 <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
应该有一个唯一标识 "campaign" 的值,因为缺少更好的词。因此,如果今天您向所有 10,000 个用户发送一封电子邮件,通知他们一些事情,那么发送的这 10,000 封电子邮件将具有相同的 email_id(它可以是任何东西:随机数、带有发送日期的哈希值,或任何只要没有其他电子邮件具有相同的)。如果您明天向您的用户发送另一封电子邮件,该电子邮件将具有不同的 email_id。
你用它完成了什么?如果我阅读了您的第一封邮件,我只会被标记为已阅读第一封邮件,而不是两者。第二个好处是您可以分别跟踪每封邮件的打开率。