public function testSendMessage()
 {
     // Create an old email to purge
     Config::set('mail-tracker.expire-days', 1);
     $old_email = \jdavidbakr\MailTracker\Model\SentEmail::create(['hash' => str_random(32)]);
     $old_url = \jdavidbakr\MailTracker\Model\SentEmailUrlClicked::create(['sent_email_id' => $old_email->id, 'hash' => str_random(32)]);
     // Go into the future to make sure that the old email gets removed
     \Carbon\Carbon::setTestNow(\Carbon\Carbon::now()->addWeek());
     $faker = Faker\Factory::create();
     $email = $faker->email;
     $subject = $faker->sentence;
     $name = $faker->firstName . ' ' . $faker->lastName;
     \View::addLocation(__DIR__);
     \Mail::send('email.test', [], function ($message) use($email, $subject, $name) {
         $message->from('*****@*****.**', 'From Name');
         $message->sender('*****@*****.**', 'Sender Name');
         $message->to($email, $name);
         $message->cc('*****@*****.**', 'CC Name');
         $message->bcc('*****@*****.**', 'BCC Name');
         $message->replyTo('*****@*****.**', 'Reply-To Name');
         $message->subject($subject);
         $message->priority(3);
     });
     $this->seeInDatabase('sent_emails', ['recipient' => $name . ' <' . $email . '>', 'subject' => $subject, 'sender' => 'From Name <*****@*****.**>', 'recipient' => "{$name} <{$email}>"]);
     $this->assertNull($old_email->fresh());
     $this->assertNull($old_url->fresh());
 }
 /**
  * Inject the tracking code into the message
  */
 public function beforeSendPerformed(\Swift_Events_SendEvent $event)
 {
     $message = $event->getMessage();
     foreach ($message->getTo() as $to_email => $to_name) {
         foreach ($message->getFrom() as $from_email => $from_name) {
             $headers = $message->getHeaders();
             $hash = str_random(32);
             $headers->addTextHeader('X-Mailer-Hash', $hash);
             $subject = $message->getSubject();
             $original_content = $message->getBody();
             if ($message->getContentType() === 'text/html' || $message->getContentType() === 'multipart/alternative' && $message->getBody()) {
                 $message->setBody($this->addTrackers($message->getBody(), $hash));
             }
             foreach ($message->getChildren() as $part) {
                 if (strpos($part->getContentType(), 'text/html') === 0) {
                     $converter->setHTML($part->getBody());
                     $part->setBody($this->addTrackers($message->getBody(), $hash));
                 }
             }
             SentEmail::create(['hash' => $hash, 'headers' => $headers->toString(), 'sender' => $from_name . " <" . $from_email . ">", 'recipient' => $to_name . ' <' . $to_email . '>', 'subject' => $subject, 'content' => $original_content, 'opens' => 0, 'clicks' => 0, 'message_id' => $message->getId(), 'meta' => []]);
         }
     }
     // Purge old records
     if (config('mail-tracker.expire-days') > 0) {
         $emails = SentEmail::where('created_at', '<', \Carbon\Carbon::now()->subDays(config('mail-tracker.expire-days')))->select('id')->get();
         SentEmailUrlClicked::whereIn('sent_email_id', $emails->pluck('id'))->delete();
         SentEmail::whereIn('id', $emails->pluck('id'))->delete();
     }
 }
 /**
  * Url Detail.
  *
  * @return \Illuminate\Http\Response
  */
 public function getUrlDetail($id)
 {
     $detalle = SentEmailUrlClicked::where('sent_email_id', $id)->get();
     if (!$detalle) {
         return back();
     }
     return \View('emailTrakingViews::url_detail')->with('details', $detalle);
 }
 public function getL($url, $hash)
 {
     $url = base64_decode(str_replace("\$", "/", $url));
     $tracker = Model\SentEmail::where('hash', $hash)->first();
     if ($tracker) {
         $tracker->clicks++;
         $tracker->save();
         $url_clicked = Model\SentEmailUrlClicked::where('url', $url)->where('hash', $hash)->first();
         if ($url_clicked) {
             $url_clicked->clicks++;
             $url_clicked->save();
         } else {
             $url_clicked = Model\SentEmailUrlClicked::create(['sent_email_id' => $tracker->id, 'url' => $url, 'hash' => $tracker->hash]);
         }
         Event::fire(new LinkClickedEvent($tracker));
     }
     return redirect($url);
 }