/** * @test */ function emails_should_be_instance_of_email_value_object() { $campaign = new Campaign(['campaignName' => 'Test Campaign', 'fromEmail' => new Email('*****@*****.**'), 'replyToEmail' => new Email('*****@*****.**'), 'bounceEmail' => new Email('*****@*****.**')]); $this->assertEquals('*****@*****.**', $campaign->fromEmail()); $this->assertEquals('*****@*****.**', $campaign->replyToEmail()); $this->assertEquals('*****@*****.**', $campaign->bounceEmail()); }
/** * @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 Mailgun $mg * @param string $domain * @param $campaignRepository * @return string */ private function setRemoteCampaignId(Campaign $campaign, MailGun $mg, $domain, CampaignRepository $campaignRepository) { $params['name'] = $campaign->campaignName(); $result = $mg->post($domain . '/campaigns', $params); $campaign->setRemoteCampaignId($result->http_response_body->campaign->id); $campaignRepository->save($campaign); return $campaign; }
/** * A basic functional test example. * * @return void */ public function testMailHook() { $campaignData['client_id'] = 1; $campaignData['domain'] = 'mg.amsvr.co.uk'; $campaignData['mail_from'] = new Email('*****@*****.**'); $clientData['name'] = 'vendirun'; $clientData['api_key'] = 'pra869z5'; $clientData['web_hook_end_point'] = 'http://app.vendirun.local/api/v1/mailwebhook'; $campaign = new Campaign($campaignData); $client = new Client($clientData); $webHookRelay = new App\AmbitiousMailSender\Base\Services\WebHookRelay\StandardWebHookRelay(); $vars = ['domain' => 'mg.amsvr.co.uk', 'event' => 'dropped', 'recipient' => '*****@*****.**']; $result = $webHookRelay->relay($vars, $client, new \App\AmbitiousMailSender\Base\Services\HttpRequest\GuzzleHttpRequest()); $this->assertEquals($campaign->domain(), 'mg.amsvr.co.uk'); $this->assertEquals($result, true); }
/** * @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 * @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); }