diff --git a/appinfo/application.php b/appinfo/application.php
index c0e1def..1768eb1 100644
--- a/appinfo/application.php
+++ b/appinfo/application.php
@@ -33,7 +33,7 @@ class Application extends App {
return new RegisterController(
$c->query('AppName'),
$c->query('Request'),
- $c->query('Mail'),
+ $c->query('Mailer'),
$c->query('L10N'),
$c->query('URLGenerator'),
$c->query('PendingRegist'),
@@ -73,8 +73,8 @@ class Application extends App {
return $c->query('ServerContainer')->getConfig();
});
- $container->registerService('Mail', function($c) {
- return new Wrapper\Mail;
+ $container->registerService('Mailer', function($c) {
+ return $c->query('ServerContainer')->getMailer();
});
$container->registerService('L10N', function($c) {
diff --git a/appinfo/info.xml b/appinfo/info.xml
index ba9ec75..a02f666 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -6,5 +6,5 @@
AGPL
Pellaeon Lin
0.0.7
- 8.0.0
+ 8.1.0
diff --git a/controller/registercontroller.php b/controller/registercontroller.php
index de68da4..b57b637 100644
--- a/controller/registercontroller.php
+++ b/controller/registercontroller.php
@@ -21,10 +21,11 @@ use \OCP\IUserManager;
use \OCP\IGroupManager;
use \OCP\IL10N;
use \OCP\IConfig;
+use \OCP\Mail\IMailer;
class RegisterController extends Controller {
- private $mail;
+ private $mailer;
private $l10n;
private $urlgenerator;
private $pendingreg;
@@ -33,9 +34,9 @@ class RegisterController extends Controller {
private $groupmanager;
protected $appName;
- public function __construct($appName, IRequest $request, Wrapper\Mail $mail, IL10N $l10n, $urlgenerator,
+ public function __construct($appName, IRequest $request, IMailer $mailer, IL10N $l10n, $urlgenerator,
$pendingreg, IUserManager $usermanager, IConfig $config, IGroupManager $groupmanager){
- $this->mail = $mail;
+ $this->mailer = $mailer;
$this->l10n = $l10n;
$this->urlgenerator = $urlgenerator;
$this->pendingreg = $pendingreg;
@@ -63,6 +64,7 @@ class RegisterController extends Controller {
*/
public function validateEmail() {
$email = $this->request->getParam('email');
+ // TODO use Mailer::validateMailAddress
if ( !filter_var($email, FILTER_VALIDATE_EMAIL) ) {
return new TemplateResponse('', 'error', array(
'errors' => array(array(
@@ -75,13 +77,9 @@ class RegisterController extends Controller {
if ( $this->pendingreg->find($email) ) {
$this->pendingreg->delete($email);
$token = $this->pendingreg->save($email);
- $link = $this->urlgenerator->linkToRoute('registration.register.verifyToken', array('token' => $token));
- $link = $this->urlgenerator->getAbsoluteURL($link);
- $from = Util::getDefaultEmailAddress('register');
- $res = new TemplateResponse('registration', 'email', array('link' => $link), 'blank');
- $msg = $res->render();
+
try {
- $this->mail->sendMail($email, 'ownCloud User', $this->l10n->t('Verify your ownCloud registration request'), $msg, $from, 'ownCloud');
+ $this->sendValidationEmail($token, $email);
} catch (\Exception $e) {
return new TemplateResponse('', 'error', array(
'errors' => array(array(
@@ -131,14 +129,8 @@ class RegisterController extends Controller {
}
$token = $this->pendingreg->save($email);
- //TODO: check for error
- $link = $this->urlgenerator->linkToRoute('registration.register.verifyToken', array('token' => $token));
- $link = $this->urlgenerator->getAbsoluteURL($link);
- $from = Util::getDefaultEmailAddress('register');
- $res = new TemplateResponse('registration', 'email', array('link' => $link), 'blank');
- $msg = $res->render();
try {
- $this->mail->sendMail($email, 'ownCloud User', $this->l10n->t('Verify your ownCloud registration request'), $msg, $from, 'ownCloud');
+ $this->sendValidationEmail($token, $email);
} catch (\Exception $e) {
return new TemplateResponse('', 'error', array(
'errors' => array(array(
@@ -248,4 +240,32 @@ class RegisterController extends Controller {
), 'guest');
}
}
+
+ /**
+ * Sends validation email
+ * @param string $token
+ * @param string $to
+ * @return null
+ * @throws \Exception
+ */
+ private function sendValidationEmail(string $token, string $to) {
+ $link = $this->urlgenerator->linkToRoute('registration.register.verifyToken', array('token' => $token));
+ $link = $this->urlgenerator->getAbsoluteURL($link);
+ $html_template = new TemplateResponse('registration', 'email_html', array('link' => $link), 'blank');
+ $html_part = $html_template->render();
+ $plaintext_template = new TemplateResponse('registration', 'email_plaintext', array('link' => $link), 'blank');
+ $plaintext_part = $plaintext_template->render();
+ $subject = $this->l10n->t('Verify your ownCloud registration request');
+
+ $from = Util::getDefaultEmailAddress('register');
+ $message = $this->mailer->createMessage();
+ $message->setFrom([$from]);
+ $message->setTo([$to]);
+ $message->setSubject($subject);
+ $message->setPlainBody($plaintext_part);
+ $message->setHtmlBody($html_part);
+ $failed_recipients = $this->mailer->send($message);
+ if ( !empty($failed_recipients) )
+ throw new \Exception('Failed recipients: '.print_r($failed_recipients, true));
+ }
}
diff --git a/templates/email.php b/templates/email.php
deleted file mode 100644
index 1907a10..0000000
--- a/templates/email.php
+++ /dev/null
@@ -1,3 +0,0 @@
-t('To create a new account on ownCloud, just click the following link:
-{link}'));
diff --git a/templates/email_html.php b/templates/email_html.php
new file mode 100644
index 0000000..dbb026f
--- /dev/null
+++ b/templates/email_html.php
@@ -0,0 +1,4 @@
+t('To create a new account on ownCloud, just click the following link:');
+echo str_replace('{link}', $_['link'], '
{link}');
diff --git a/templates/email_plaintext.php b/templates/email_plaintext.php
new file mode 100644
index 0000000..ae24a92
--- /dev/null
+++ b/templates/email_plaintext.php
@@ -0,0 +1,3 @@
+t("To create a new account on ownCloud, just click the following link:");
+echo str_replace('{link}', $_['link'], "\n\n{link}");
diff --git a/wrapper/mail.php b/wrapper/mail.php
deleted file mode 100644
index 1288482..0000000
--- a/wrapper/mail.php
+++ /dev/null
@@ -1,36 +0,0 @@
-
- * @copyright Pellaeon Lin, 2014
- */
-
-namespace OCA\Registration\Wrapper;
-
-class Mail {
-
- /**
- * send an email
- * @param string $toaddress
- * @param string $toname
- * @param string $subject
- * @param string $mailtext
- * @param string $fromaddress
- * @param string $fromname
- * @param int $html
- * @param string $altbody
- * @param string $ccaddress
- * @param string $ccname
- * @param string $bcc
- */
- public function sendMail( $toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname,
- $html = 0, $altbody = '', $ccaddress = '', $ccname = '', $bcc = '') {
- // call the internal mail class
- \OCP\Util::sendMail($toaddress, $toname, $subject, $mailtext, $fromaddress, $fromname,
- $html, $altbody, $ccaddress, $ccname, $bcc);
- }
-}