コード例 #1
0
ファイル: Email.php プロジェクト: liftkit/email
 public function from($address, $name = '')
 {
     $this->phpMailer->SetFrom($address, $name);
     return $this;
 }
コード例 #2
0
 /**
  * @param UserModel  $user
  * @param EmailModel $emailModel
  * @param array      $variables
  * @throws Exception
  * @return bool
  */
 private function _sendEmail(UserModel $user, EmailModel $emailModel, $variables = array())
 {
     // Get the saved email settings.
     $emailSettings = $this->getSettings();
     if (!isset($emailSettings['protocol'])) {
         throw new Exception(Craft::t('Could not determine how to send the email.  Check your email settings.'));
     }
     $email = new \PhpMailer(true);
     // Default the charset to UTF-8
     $email->CharSet = 'UTF-8';
     // Add a reply to (if any).  Make sure it’s set before setting From, because email is dumb.
     if (!empty($emailModel->replyTo)) {
         $email->AddReplyTo($emailModel->replyTo);
     }
     // Set the "from" information.
     $email->SetFrom($emailModel->fromEmail, $emailModel->fromName);
     // Check which protocol we need to use.
     switch ($emailSettings['protocol']) {
         case EmailerType::Gmail:
         case EmailerType::Smtp:
             $this->_setSmtpSettings($email, $emailSettings);
             break;
         case EmailerType::Pop:
             $pop = new \Pop3();
             if (!isset($emailSettings['host']) || !isset($emailSettings['port']) || !isset($emailSettings['username']) || !isset($emailSettings['password']) || StringHelper::isNullOrEmpty($emailSettings['host']) || StringHelper::isNullOrEmpty($emailSettings['port']) || StringHelper::isNullOrEmpty($emailSettings['username']) || StringHelper::isNullOrEmpty($emailSettings['password'])) {
                 throw new Exception(Craft::t('Host, port, username and password must be configured under your email settings.'));
             }
             if (!isset($emailSettings['timeout'])) {
                 $emailSettings['timeout'] = $this->_defaultEmailTimeout;
             }
             $pop->authorize($emailSettings['host'], $emailSettings['port'], $emailSettings['timeout'], $emailSettings['username'], $emailSettings['password'], craft()->config->get('devMode') ? 1 : 0);
             $this->_setSmtpSettings($email, $emailSettings);
             break;
         case EmailerType::Sendmail:
             $email->IsSendmail();
             break;
         case EmailerType::Php:
             $email->IsMail();
             break;
         default:
             $email->IsMail();
     }
     // If they have the test email config var set to something, use it instead of the supplied email.
     if (($testToEmail = craft()->config->get('testToEmailAddress')) != '') {
         $email->AddAddress($testToEmail, 'Test Email');
     } else {
         $email->AddAddress($user->email, $user->getFullName());
     }
     // Add any BCC's
     if (!empty($emailModel->bcc)) {
         foreach ($emailModel->bcc as $bcc) {
             if (!empty($bcc['email'])) {
                 $bccEmail = $bcc['email'];
                 $bccName = !empty($bcc['name']) ? $bcc['name'] : '';
                 $email->AddBcc($bccEmail, $bccName);
             }
         }
     }
     // Add any CC's
     if (!empty($emailModel->cc)) {
         foreach ($emailModel->cc as $cc) {
             if (!empty($cc['email'])) {
                 $ccEmail = $cc['email'];
                 $ccName = !empty($cc['name']) ? $cc['name'] : '';
                 $email->AddCc($ccEmail, $ccName);
             }
         }
     }
     // Add a sender header (if any)
     if (!empty($emailModel->sender)) {
         $email->Sender = $emailModel->sender;
     }
     // Add any string attachments
     if (!empty($emailModel->stringAttachments)) {
         foreach ($emailModel->stringAttachments as $stringAttachment) {
             $email->AddStringAttachment($stringAttachment['string'], $stringAttachment['fileName'], $stringAttachment['encoding'], $stringAttachment['type']);
         }
     }
     // Add any normal disc attachments
     if (!empty($emailModel->attachments)) {
         foreach ($emailModel->attachments as $attachment) {
             $email->AddAttachment($attachment['path'], $attachment['name'], $attachment['encoding'], $attachment['type']);
         }
     }
     $variables['user'] = $user;
     $email->Subject = craft()->templates->renderString($emailModel->subject, $variables);
     // If they populated an htmlBody, use it.
     if ($emailModel->htmlBody) {
         $renderedHtmlBody = craft()->templates->renderString($emailModel->htmlBody, $variables);
         $email->MsgHTML($renderedHtmlBody);
         $email->AltBody = craft()->templates->renderString($emailModel->body, $variables);
     } else {
         // They didn't provide an htmlBody, so markdown the body.
         $renderedHtmlBody = craft()->templates->renderString(StringHelper::parseMarkdown($emailModel->body), $variables);
         $email->MsgHTML($renderedHtmlBody);
         $email->AltBody = craft()->templates->renderString($emailModel->body, $variables);
     }
     if (!$email->Send()) {
         throw new Exception(Craft::t('Email error: {error}', array('error' => $email->ErrorInfo)));
     }
     return true;
 }