. */ namespace Fisharebest\Webtrees; use Exception; use Swift_Mailer; use Swift_MailTransport; use Swift_Message; use Swift_NullTransport; use Swift_SmtpTransport; use Swift_Transport; /** * Send mail messages. */ class Mail { const EOL = "
\r\n"; // End-of-line that works for both TEXT and HTML messages /** * Send an external email message * Caution! gmail may rewrite the "From" header unless you have added the address to your account. * * @param Tree $tree * @param string $to_email * @param string $to_name * @param string $replyto_email * @param string $replyto_name * @param string $subject * @param string $message * * @return bool */ public static function send(Tree $tree, $to_email, $to_name, $replyto_email, $replyto_name, $subject, $message) { try { $mail = Swift_Message::newInstance() ->setSubject($subject) ->setFrom(Site::getPreference('SMTP_FROM_NAME'), $tree->getPreference('title')) ->setTo($to_email, $to_name) ->setReplyTo($replyto_email, $replyto_name) ->setBody($message, 'text/html') ->addPart(Filter::unescapeHtml($message), 'text/plain'); Swift_Mailer::newInstance(self::transport())->send($mail); } catch (Exception $ex) { Log::addErrorLog('Mail: ' . $ex->getMessage()); return false; } return true; } /** * Send an automated system message (such as a password reminder) from a tree to a user. * * @param Tree $tree * @param User $user * @param string $subject * @param string $message * * @return bool */ public static function systemMessage(Tree $tree, User $user, $subject, $message) { return self::send( $tree, $user->getEmail(), $user->getRealName(), Site::getPreference('SMTP_FROM_NAME'), $tree->getPreference('title'), $subject, $message ); } /** * Create a transport mechanism for sending mail * * @return Swift_Transport */ public static function transport() { switch (Site::getPreference('SMTP_ACTIVE')) { case 'internal': return Swift_MailTransport::newInstance(); case 'external': $transport = Swift_SmtpTransport::newInstance() ->setHost(Site::getPreference('SMTP_HOST')) ->setPort(Site::getPreference('SMTP_PORT')) ->setLocalDomain(Site::getPreference('SMTP_HELO')); if (Site::getPreference('SMTP_AUTH')) { $transport ->setUsername(Site::getPreference('SMTP_AUTH_USER')) ->setPassword(Site::getPreference('SMTP_AUTH_PASS')); } if (Site::getPreference('SMTP_SSL') !== 'none') { $transport->setEncryption(Site::getPreference('SMTP_SSL')); } return $transport; default: // For testing return Swift_NullTransport::newInstance(); } } }