コード例 #1
0
 /**
  * Execute this console command to send an email
  *
  * @param  InputInterface  $input  Command line input interface
  * @param  OutputInterface $output Command line output interface
  */
 public function execute(InputInterface $input, OutputInterface $output)
 {
     if (!$this->emailSender) {
         throw new LogicException('No email sender configured (did you set the Mandrill API key?)');
     }
     if (!$this->emailMapper) {
         throw new LogicException('No email mapper configured');
     }
     $output->writeln('Finding email by ID');
     $emailId = $input->getArgument('id');
     $email = $this->emailMapper->findById($emailId);
     if (!$email or $email->isNew()) {
         throw new OutOfBoundsException('Email not found.');
     }
     $output->writeln('Sending email');
     list($email, $result) = $this->emailSender->send($email);
     if ($email->getStatus() !== EmailEntity::STATUS_SENT) {
         $format = 'Email did NOT send successfully. Returned with status %s.';
         $message = sprintf($format, $result['status']);
         if (isset($result['reject_reason'])) {
             $message .= ' Reason rejected: ' . $result['reject_reason'];
         }
         $output->writeln($message);
         return 500;
     }
     $output->writeln('Email sent successfully!');
 }
コード例 #2
0
 /**
  * Create an email entity from an array and populate with default data
  *
  * @param  array  $data Data to populate the email
  * @return Email
  */
 public function createFromArray(array $data)
 {
     $headers = json_encode(Arr::path($this->emailConfig, 'defaults.headers', []));
     $defaults = ['headers' => $headers, 'sender_email' => Arr::path($this->emailConfig, 'defaults.sender.email'), 'sender_name' => Arr::path($this->emailConfig, 'defaults.sender.name')];
     $email = $this->emailMapper->getPrototype();
     $email = $email->exchangeArray(array_merge($defaults, $data));
     $email = $this->emailMapper->persist($email);
     return $email;
 }
コード例 #3
0
 /**
  * {@inheritDoc}
  */
 public function send(EmailEntity $email)
 {
     $time = time();
     $message = $this->buildMessage($email);
     $result = $this->mandrill->messages->send($message);
     $result = array_shift($result);
     $email->setStatus($result['status']);
     $email->setSent($time);
     $email->setUpdated($time);
     $this->mapper->update($email);
     return [$email, $result];
 }
コード例 #4
0
 /**
  * Create an email entity from an array and populate with default data
  *
  * @param  array  $data Data to populate the email
  * @return Email
  */
 public function createFromArray(array $data)
 {
     $headers = json_encode(Arr::path($this->emailConfig, 'defaults.headers', []));
     if (isset($data['sender_localpart'])) {
         if (!Arr::path($this->emailConfig, 'defaults.sender.domain')) {
             throw new \Exception('defaults.sender.domain not set in email config');
         }
         $data['sender_email'] = Arr::remove($data, 'sender_localpart') . '@' . Arr::path($this->emailConfig, 'defaults.sender.domain');
     }
     $defaults = ['headers' => $headers, 'sender_email' => Arr::path($this->emailConfig, 'defaults.sender.email'), 'sender_name' => Arr::path($this->emailConfig, 'defaults.sender.name')];
     $email = $this->emailMapper->getPrototype();
     $email = $email->exchangeArray(array_merge($defaults, $data));
     $email = $this->emailMapper->persist($email);
     return $email;
 }
コード例 #5
0
 /**
  * {@inheritDoc}
  */
 public function send(EmailEntity $email)
 {
     $time = time();
     $message = $this->buildMessage($email);
     // Get domain from the "from" address
     if (!preg_match('/@(.+)$/', $email->getSenderEmail(), $matches)) {
         throw new \Exception("Invalid from address: {$email->getSenderEmail()}");
     }
     $domain = $matches[1];
     $result = $this->mailgun->sendMessage($domain, $message);
     $email->setStatus($result->http_response_code === 200 ? 'sent' : 'error');
     $email->setSent($time);
     $email->setUpdated($time);
     $this->mapper->update($email);
     return [$email, $result];
 }