Example #1
0
 /**
  * Send email message(s)
  *
  * @param Message $message
  * @param array $emails
  * @return int
  * @throws SMTPException
  */
 public function send(Message $message, array $emails) : int
 {
     $this->connect();
     // Establish or revive connection
     $this->command("RSET");
     // Reset SMTP buffer
     $this->command(sprintf('MAIL FROM:<%1$s>', $message->getSender()[0]), null, 250);
     // Set mail from
     $count = 0;
     foreach ($emails as $email) {
         $this->write(sprintf('RCPT TO:<%1$s>', $email));
         $this->read();
         if ($this->lastResponseCode !== 250) {
             throw SMTPException::invalidRecipient(substr($this->lastResponse, 4));
         }
         $count++;
     }
     $messageMime = $message->getCompiled();
     $messageMimeSize = strlen($messageMime);
     if ($this->options["size"] > 0 && $messageMimeSize > $this->options["size"]) {
         throw SMTPException::exceedsMaximumSize($messageMimeSize, $this->options["size"]);
     }
     $this->command("DATA", null, 354);
     $this->write($messageMime);
     // Write MIME
     $this->command(".", null, 250);
     // End DATA
     // Keep alive?
     if (!$this->keepAlive) {
         $this->write("QUIT");
         // Send QUIT command
         unset($this->stream);
         // Close stream resource
     }
     return $count;
 }