Читать электронную почту или нет |в CodeIgniter - PullRequest
0 голосов
/ 16 октября 2018

Я хочу знать, прочитал ли человек почту или нет .. Это хорошо работает, если человек нажимает на ссылку внутри почты.Но я хочу, чтобы это работало без ссылки, поэтому мне нужно добавить картинку <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 в Email Controller

 public function Track_Open_Email ($email)
   {  
    $this->Email_model->Set_Track_Open_Email($email , $data);
     }// from here will go to Email model

1 Ответ

0 голосов
/ 16 октября 2018

Передача параметра в качестве элемента URI в CI не приводит к автоматическому преобразованию его в переменную, ожидаемую функцией.

Я предлагаю следующее:

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 должно иметь значение, которое однозначно идентифицирует "кампанию" из-за отсутствия лучшего словаТаким образом, если сегодня вы отправите электронное письмо всем своим 10000 пользователям, информирующее их о чем-то, то эти 10000 отправленных электронных писем будут иметь тот же email_id (это может быть что угодноg: одноразовый номер, хеш с датой отправки или что-то еще, если ни одно другое письмо не имеет такой же).Если завтра вы отправите еще одно электронное письмо своим пользователям, оно будет иметь другой email_id.Что вы делаете с этим?Если я читаю ваше первое письмо, я отмечаюсь как прочитавшее первое письмо, а не оба.Вторым преимуществом является то, что вы можете отслеживать открытые тарифы для каждого письма отдельно.

...