/** * @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; }