/**
  * @param Campaign           $campaign
  * @param CampaignEmail      $campaignEmail
  * @param CampaignRepository $campaignRepository
  * @return bool
  */
 public function send(Campaign $campaign, CampaignEmail $campaignEmail, CampaignRepository $campaignRepository)
 {
     $name = $this->getNameFromVariables($campaignEmail->variables());
     $html = $this->insertVariables($campaign->html(), $campaignEmail->variables());
     $plaintext = $this->insertVariables($campaign->plaintext(), $campaignEmail->variables());
     $subjectLine = $this->insertVariables($campaign->subjectLine(), $campaignEmail->variables());
     $message = Swift_Message::newInstance();
     $message->setTo(array($campaignEmail->emailAddress() => $name));
     $message->setSubject($subjectLine);
     $message->setBody($plaintext, 'text/plain');
     $message->addPart($html, 'text/html');
     $message->setFrom(array($campaign->fromEmail() => $campaign->fromName()));
     if ($campaign->replyToEmail()) {
         $message->setReplyTo($campaign->replyToEmail());
     }
     if ($campaign->bounceEmail()) {
         $message->setReturnPath($campaign->bounceEmail());
     }
     // Send the email
     $transport = Swift_SmtpTransport::newInstance(Config::get('mail.host'), Config::get('mail.port'));
     $transport->setUsername(Config::get('mail.username'));
     $transport->setPassword(Config::get('mail.password'));
     $mailer = Swift_Mailer::newInstance($transport);
     $result = $mailer->send($message);
     return (bool) $result;
 }
 /**
  * @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 get_email_domain_returns_domain()
 {
     $campaignEmail = new CampaignEmail($this->campaignEmailData);
     $this->assertEquals('gmail.com', $campaignEmail->getEmailDomain());
 }
 /**
  * @param CampaignEmail $campaignEmail
  * @return CampaignEmail
  */
 public function save($campaignEmail)
 {
     $data = ['id' => $campaignEmail->id(), 'campaign_id' => $campaignEmail->campaignId(), 'email_address' => $campaignEmail->emailAddress(), 'variables' => json_encode($campaignEmail->variables()), 'failed' => $campaignEmail->failed(), 'created_at' => $campaignEmail->createdAt(), 'updated_at' => $campaignEmail->updatedAt()];
     return $this->saveEntity($campaignEmail, $data);
 }