/**
  * @param Campaign           $campaign
  * @param CampaignEmail      $campaignEmail
  * @param CampaignRepository $campaignRepository
  * @return boolean
  */
 public function send(Campaign $campaign, CampaignEmail $campaignEmail, CampaignRepository $campaignRepository = null)
 {
     $vars = [];
     $vars['from'] = $campaign->fromName() . ' <' . $campaign->fromEmail() . '>';
     $vars['to'] = $this->getNameFromVariables($campaignEmail->variables()) . ' <' . $campaignEmail->emailAddress() . '>';
     $vars['subject'] = $this->insertVariables($campaign->subjectLine(), $campaignEmail->variables());
     $vars['text'] = $this->insertVariables($campaign->plaintext(), $campaignEmail->variables());
     $vars['html'] = $this->insertVariables($campaign->html(), $campaignEmail->variables());
     $vars['o:campaign'] = $campaign->remoteCampaignId();
     return true;
 }
 /**
  * @param Campaign           $campaign
  * @param CampaignEmail      $campaignEmail
  * @param CampaignRepository $campaignRepository
  * @return Campaign
  * @throws \Mailgun\Messages\Exceptions\MissingRequiredMIMEParameters
  */
 public function send(Campaign $campaign, CampaignEmail $campaignEmail, CampaignRepository $campaignRepository)
 {
     $mg = new Mailgun($this->key);
     $domain = $campaign->getFromEmailDomain();
     if (!$campaign->remoteCampaignId()) {
         $campaign = $this->setRemoteCampaignId($campaign, $mg, $domain, $campaignRepository);
     }
     $vars = [];
     $vars['from'] = $campaign->fromName() . ' <' . $campaign->fromEmail() . '>';
     $vars['to'] = $this->getNameFromVariables($campaignEmail->variables()) . ' <' . $campaignEmail->emailAddress() . '>';
     $vars['subject'] = $this->insertVariables($campaign->subjectLine(), $campaignEmail->variables());
     $vars['text'] = $this->insertVariables($campaign->plaintext(), $campaignEmail->variables());
     $vars['html'] = $this->insertVariables($campaign->html(), $campaignEmail->variables());
     $vars['o:campaign'] = $campaign->remoteCampaignId();
     $vars['o:testmode'] = $this->testMode;
     $result = $mg->sendMessage($domain, $vars);
     return $result;
 }
 /**
  * @test
  */
 function it_has_some_fields_that_can_be_set_and_recalled()
 {
     $campaign = new Campaign($this->campaignData);
     $this->assertEquals(1, $campaign->id());
     $this->assertEquals('fJFur', $campaign->remoteCampaignId());
     $this->assertEquals('Test Campaign', $campaign->campaignName());
     $this->assertEquals('This is a test campaign', $campaign->subjectLine());
     $this->assertEquals('Alistair Shaw', $campaign->fromName());
     $this->assertEquals(true, $campaign->trackOpens());
     $this->assertEquals(false, $campaign->trackClicks());
     $this->assertEquals('<p>This is a test</p>', $campaign->html());
     $this->assertEquals('This is a test', $campaign->plaintext());
     $this->assertEquals('*****@*****.**', $campaign->fromEmail());
     $this->assertEquals('*****@*****.**', $campaign->replyToEmail());
     $this->assertEquals('*****@*****.**', $campaign->bounceEmail());
     $this->assertEquals('gmail.com', $campaign->domain());
     $this->assertEquals('2015-03-01 09:25:37', $campaign->createdAt());
     $this->assertEquals('2015-03-05 19:15:32', $campaign->updatedAt());
 }
 /**
  * @param Campaign $campaign
  * @return Campaign
  */
 public function save($campaign)
 {
     $data = ['id' => $campaign->id(), 'client_id' => $campaign->clientId(), 'remote_campaign_id' => $campaign->remoteCampaignId(), 'campaign_name' => $campaign->campaignName(), 'subject_line' => $campaign->subjectLine(), 'from_name' => $campaign->fromName(), 'track_opens' => $campaign->trackOpens(), 'track_clicks' => $campaign->trackClicks(), 'html' => $campaign->html(), 'plaintext' => $campaign->plaintext(), 'from_email' => $campaign->fromEmail(), 'reply_to_email' => $campaign->replyToEmail(), 'bounce_email' => $campaign->bounceEmail(), 'domain' => $campaign->domain(), 'created_at' => $campaign->createdAt(), 'updated_at' => $campaign->updatedAt()];
     return $this->saveEntity($campaign, $data);
 }