Adapt mail in LostPasswordForm
authorTim Düsterhus <duesterhus@woltlab.com>
Fri, 29 Jul 2016 18:22:48 +0000 (20:22 +0200)
committerTim Düsterhus <duesterhus@woltlab.com>
Fri, 29 Jul 2016 20:47:22 +0000 (22:47 +0200)
com.woltlab.wcf/templates/email_lostPassword.tpl [new file with mode: 0644]
wcfsetup/install/files/lib/form/LostPasswordForm.class.php
wcfsetup/install/lang/de.xml
wcfsetup/install/lang/en.xml

diff --git a/com.woltlab.wcf/templates/email_lostPassword.tpl b/com.woltlab.wcf/templates/email_lostPassword.tpl
new file mode 100644 (file)
index 0000000..94b405a
--- /dev/null
@@ -0,0 +1,19 @@
+{if $mimeType === 'text/plain'}
+{capture assign='content'}{lang}wcf.user.lostPassword.mail.plaintext{/lang}{/capture}
+{include file='email_plaintext'}
+{else}
+       {capture assign='content'}
+       <h1>{lang}wcf.user.lostPassword.mail.html.headline{/lang}</h1>
+       {lang}wcf.user.lostPassword.mail.html.intro{/lang}
+
+       {capture assign=button}
+       <a href="{link controller='NewPassword' object=$mailbox->getUser() isEmail=true}k={@$mailbox->getUser()->lostPasswordKey}{/link}">
+               {lang}wcf.user.lostPassword.mail.html.reset{/lang}
+       </a>
+       {/capture}
+       {include file='email_paddingHelper' class='button' content=$button sandbox=true}
+
+       {lang}wcf.user.lostPassword.mail.html.outro{/lang}
+       {/capture}
+       {include file='email_html'}
+{/if}
index 3e67a26169badd30170f8adbeb1bbd50f4272837..27d2ff5fe794018513785c0bf533cea131874d34 100644 (file)
@@ -4,11 +4,15 @@ use wcf\data\user\User;
 use wcf\data\user\UserAction;
 use wcf\system\exception\NamedUserException;
 use wcf\system\exception\UserInputException;
-use wcf\system\mail\Mail;
+use wcf\system\email\mime\MimePartFacade;
+use wcf\system\email\mime\RecipientAwareTextMimePart;
+use wcf\system\email\Email;
+use wcf\system\email\UserMailbox;
 use wcf\system\request\LinkHandler;
 use wcf\system\WCF;
 use wcf\util\CryptoUtil;
 use wcf\util\HeaderUtil;
+use wcf\util\StringUtil;
 
 /**
  * Shows the lost password form.
@@ -106,13 +110,18 @@ class LostPasswordForm extends AbstractCaptchaForm {
                ]);
                $this->objectAction->executeAction();
                
-               // send mail
-               $mail = new Mail([$this->user->username => $this->user->email], WCF::getLanguage()->getDynamicVariable('wcf.user.lostPassword.mail.subject'), WCF::getLanguage()->getDynamicVariable('wcf.user.lostPassword.mail', [
-                       'username' => $this->user->username,
-                       'userID' => $this->user->userID,
-                       'key' => $lostPasswordKey
+               // reload object
+               $this->user = new User($this->user->userID);
+               
+               $email = new Email();
+               $email->addRecipient(new UserMailbox($this->user));
+               $email->setSubject($this->user->getLanguage()->getDynamicVariable('wcf.user.lostPassword.mail.subject'));
+               $email->setBody(new MimePartFacade([
+                       new RecipientAwareTextMimePart('text/html', 'email_lostPassword'),
+                       new RecipientAwareTextMimePart('text/plain', 'email_lostPassword')
                ]));
-               $mail->send();
+               $email->send();
+               
                $this->saved();
                
                // forward to index page
index dc1489a080aea15e3d552c3e08d29125514d0809..22f1496b895bea00c2b182606b2e98609a1c2a6b 100644 (file)
@@ -2838,12 +2838,25 @@ Fehler sind beispielsweise:
                <item name="wcf.user.lostPassword.email.error.notFound"><![CDATA[Es wurde kein Benutzer mit der E-Mail-Adresse: „{$email}“ gefunden.]]></item>
                <item name="wcf.user.lostPassword.error.tooManyRequests"><![CDATA[Das Kennwort für dieses Benutzerkonto wurde in den letzten 24 Stunden bereits einmal angefordert. Aus Sicherheitsgründen kann das Kennwort eines Benutzers nur einmal pro Tag angefordert werden. Sie können das Kennwort für dieses Benutzerkonto in {#$hours} Stunde{if $hours != 1}n{/if} erneut anfordern.]]></item>
                <item name="wcf.user.lostPassword.mail.subject"><![CDATA[Kennwort vergessen auf der Website: {@PAGE_TITLE|language}]]></item>
-               <item name="wcf.user.lostPassword.mail"><![CDATA[Hallo {@$username},
+               <item name="wcf.user.lostPassword.mail.plaintext"><![CDATA[Hallo {@$mailbox->getUser()->username},
 
-{if LANGUAGE_USE_INFORMAL_VARIANT}wenn du dein Kennwort vergessen hast, kannst du über folgenden Link ein neues Kennwort anfordern.{else}wenn Sie Ihr Kennwort vergessen haben, können Sie über folgenden Link ein neues Kennwort anfordern.{/if} 
-{if LANGUAGE_USE_INFORMAL_VARIANT}Klicke{else}Klicken Sie{/if} hier, um ein neues Kennwort anzufordern: {link controller='NewPassword' isEmail=true}u={@$userID}&k={@$key}{/link}
+{if LANGUAGE_USE_INFORMAL_VARIANT}du (oder jemand anders) hat{else}Sie (oder jemand anders) haben{/if} angegeben das Kennwort für das Benutzerkonto
+{@$mailbox->getUser()->username} auf der Seite {@PAGE_TITLE|language} [URL:{link isEmail=true}{/link}] vergessen zu haben. {if LANGUAGE_USE_INFORMAL_VARIANT}Du kannst dein{else}Sie können Ihr{/if} Kennwort
+nach einem Klick auf den Folgenden Link ändern:
 
-{if LANGUAGE_USE_INFORMAL_VARIANT}Falls du dein Kennwort nicht vergessen hast, kannst du diese E-Mail ignorieren.{else}Falls Sie Ihr Kennwort nicht vergessen haben, können Sie diese E-Mail ignorieren.{/if}]]></item>
+    {link controller='NewPassword' object=$mailbox->getUser() isEmail=true}k={@$mailbox->getUser()->lostPasswordKey}{/link} {* this line ends with a space *}
+
+Wenn {if LANGUAGE_USE_INFORMAL_VARIANT}du dein{else}Sie Ihr{/if} Kennwort nicht ändern {if LANGUAGE_USE_INFORMAL_VARIANT}möchtest{else}möchten{/if}, dann wird diese Anfrage
+am {$mailbox->getUser()->lastLostPasswordRequestTime+86400|plainTime} automatisch ablaufen.]]></item>
+               <item name="wcf.user.lostPassword.mail.html.headline"><![CDATA[Hallo {@$mailbox->getUser()->username},]]></item>
+               <item name="wcf.user.lostPassword.mail.html.intro"><![CDATA[
+<p>{if LANGUAGE_USE_INFORMAL_VARIANT}du (oder jemand anders) hat{else}Sie (oder jemand anders) haben{/if} angegeben das
+Kennwort für das Benutzerkonto {@$mailbox->getUser()->username} auf der Seite <a href="{link isEmail=true}{/link}">{@PAGE_TITLE|language}</a> vergessen zu
+haben:</p>]]></item>
+               <item name="wcf.user.lostPassword.mail.html.reset"><![CDATA[Kennwort ändern]]></item>
+               <item name="wcf.user.lostPassword.mail.html.outro"><![CDATA[
+<p>Wenn {if LANGUAGE_USE_INFORMAL_VARIANT}du dein{else}Sie Ihr{/if} Kennwort nicht ändern {if LANGUAGE_USE_INFORMAL_VARIANT}möchtest{else}möchten{/if},
+dann wird diese Anfrage am {$mailbox->getUser()->lastLostPasswordRequestTime+86400|plainTime} automatisch ablaufen.</p>]]></item>
                <item name="wcf.user.lostPassword.mail.sent"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Du erhälst{else}Sie erhalten{/if} in Kürze eine E-Mail mit weiteren Informationen.]]></item>
                <item name="wcf.user.lostPasswordKey"><![CDATA[Sicherheitsschlüssel]]></item>
                <item name="wcf.user.lostPasswordKey.error.notValid"><![CDATA[{if LANGUAGE_USE_INFORMAL_VARIANT}Du hast{else}Sie haben{/if} einen ungültigen Sicherheitsschlüssel angegeben.]]></item>
index e4e94b849d2a92623599c4ba56bfbc3c4c4599d0..6ed03af0cbbfe4587d7398352da572a17557363f 100644 (file)
@@ -2879,12 +2879,22 @@ Errors are:
                <item name="wcf.user.lostPassword.email.error.notFound"><![CDATA[“{$email}” is not used by any account.]]></item>
                <item name="wcf.user.lostPassword.error.tooManyRequests"><![CDATA[The password has been requested at least once in the past 24 hours. For security reasons you must wait at least {#$hours} hour{if $hours != 1}s{/if} before requesting it again.]]></item>
                <item name="wcf.user.lostPassword.mail.subject"><![CDATA[Lost Password for Website: {@PAGE_TITLE|language}]]></item>
-               <item name="wcf.user.lostPassword.mail"><![CDATA[Dear {@$username},
+               <item name="wcf.user.lostPassword.mail.plaintext"><![CDATA[Dear {@$mailbox->getUser()->username},
 
-if you have lost your password you can request a new one using the link below.
-Request a new password: {link controller='NewPassword' isEmail=true}u={@$userID}&k={@$key}{/link}
+you (or someone else) claimed to have lost the password for the user account {@$mailbox->getUser()->username} on
+the website {@PAGE_TITLE|language} [URL:{link isEmail=true}{/link}]. You can change your password after clicking
+the following link:
 
-If you have not lost your password, you can safely ignore this email.]]></item>
+    {link controller='NewPassword' object=$mailbox->getUser() isEmail=true}k={@$mailbox->getUser()->lostPasswordKey}{/link} {* this line ends with a space *}
+
+If you don’t want to change your password you can simply wait. The request will expire at {$mailbox->getUser()->lastLostPasswordRequestTime+86400|plainTime}.]]></item>
+               <item name="wcf.user.lostPassword.mail.html.headline"><![CDATA[Dear {@$mailbox->getUser()->username},]]></item>
+               <item name="wcf.user.lostPassword.mail.html.intro"><![CDATA[
+<p>you (or someone else) claimed to have lost the password for the user account {@$mailbox->getUser()->username} on
+the website <a href="{link isEmail=true}{/link}">{@PAGE_TITLE|language}</a>.</p>]]></item>
+               <item name="wcf.user.lostPassword.mail.html.reset"><![CDATA[Change Password]]></item>
+               <item name="wcf.user.lostPassword.mail.html.outro"><![CDATA[
+<p>If you don’t want to change your password you can simply wait. The request will expire at {$mailbox->getUser()->lastLostPasswordRequestTime+86400|plainTime}.</p>]]></item>
                <item name="wcf.user.lostPassword.mail.sent"><![CDATA[You should receive an email shortly.]]></item>
                <item name="wcf.user.lostPasswordKey"><![CDATA[Security Key]]></item>
                <item name="wcf.user.lostPasswordKey.error.notValid"><![CDATA[Security Key is invalid.]]></item>