Custom email body (#51)

* get email body from ENV

* read subject from env

* html mail

* replace special string with username and password

* missing ;

* more str_replace

* utf8 in mail

* typo

* docs

* fix var

* count accounts

* fix print
This commit is contained in:
Monsieur X 2021-04-01 08:15:15 +00:00 committed by GitHub
parent 65bee01fad
commit b33ff26fd2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 30 additions and 5 deletions

View File

@ -156,11 +156,24 @@ To send emails you'll need to use an existing SMTP server. Email sending will b
* `EMAIL_FROM_NAME` (default: *`SITE_NAME`*): The FROM name used when sending out emails. The default name is taken from `SITE_NAME` under **Organisation settings**. * `EMAIL_FROM_NAME` (default: *`SITE_NAME`*): The FROM name used when sending out emails. The default name is taken from `SITE_NAME` under **Organisation settings**.
* `MAIL_SUBJECT` (default: Your $ORGANISATION_NAME account has been created.): The mail subject
* `MAIL_BODY` (default: ): The mail body. You can use the following substring in the body which will be replaced by user info:
- `#username#`: the user username
- `#first_name#`: the user first name
- `#last_name#`: the user last name
- `#password#`: the user password
**Account requests**
#### Account request settings #### Account request settings
* `ACCOUNT_REQUESTS_ENABLED` (default: *FALSE*): Set to TRUE in order to enable a form that people can fill in to request an account. This will send an email to `ACCOUNT_REQUESTS_EMAIL` with their details and a link to the account creation page where the details will be filled in automatically. You'll need to set up email sending (see **Email sending**, above) for this to work. If this is enabled but email sending isn't then requests will be disabled and an error message sent to the logs. * `ACCOUNT_REQUESTS_ENABLED` (default: *FALSE*): Set to TRUE in order to enable a form that people can fill in to request an account. This will send an email to `ACCOUNT_REQUESTS_EMAIL` with their details and a link to the account creation page where the details will be filled in automatically. You'll need to set up email sending (see **Email sending**, above) for this to work. If this is enabled but email sending isn't then requests will be disabled and an error message sent to the logs.
* `ACCOUNT_REQUESTS_EMAIL` (default: *`EMAIL_FROM_ADDRESS`*): This is the email address that any requests for a new account are sent to. * `ACCOUNT_REQUESTS_EMAIL` (default: *{EMAIL_FROM_ADDRESS}*): This is the email address that any requests for a new account are sent to.
**Site security settings**
#### Website security #### Website security

View File

@ -51,6 +51,10 @@ $people = ldap_get_user_list($ldap_connection);
?> ?>
<div class="container"> <div class="container">
<div>
<p><?php print count($people);?> accounts</p>
</div>
<form action="/<?php print $THIS_MODULE_PATH; ?>/new_user.php" method="post"> <form action="/<?php print $THIS_MODULE_PATH; ?>/new_user.php" method="post">
<button id="add_group" class="btn btn-default" type="submit">New user</button> <button id="add_group" class="btn btn-default" type="submit">New user</button>
</form> </form>

View File

@ -121,9 +121,9 @@ if (isset($_POST['create_account'])) {
if (isset($send_user_email) and $send_user_email == TRUE) { if (isset($send_user_email) and $send_user_email == TRUE) {
$mail_subject = "Your $ORGANISATION_NAME account has been created."; $mail_subject = getenv('MAIL_SUBJECT') ?: "Your $ORGANISATION_NAME account has been created.";
$mail_body = <<<EoT $mail_body = getenv('MAIL_BODY') ?: <<<EoT
You've been set up with an account for $ORGANISATION_NAME. Your credentials are: You've been set up with an account for $ORGANISATION_NAME. Your credentials are:
Username: $account_identifier Username: $account_identifier
@ -132,6 +132,12 @@ Password: $password
You should change your password as soon as possible. Go to ${SITE_PROTOCOL}${SERVER_HOSTNAME}/change_password and log in using your new credentials. This will take you to a page where you can change your password. You should change your password as soon as possible. Go to ${SITE_PROTOCOL}${SERVER_HOSTNAME}/change_password and log in using your new credentials. This will take you to a page where you can change your password.
EoT; EoT;
// Replace special substring with user variables (substring are used in env)
$mail_body = str_replace("#username#", $account_identifier, $mail_body);
$mail_body = str_replace("#first_name#", $givenname, $mail_body);
$mail_body = str_replace("#last_name#", $sn, $mail_body);
$mail_body = str_replace("#password#", $password, $mail_body);
include_once "mail_functions.inc.php"; include_once "mail_functions.inc.php";
$sent_email = send_email($mail,"$first_name $last_name",$mail_subject,$mail_body); $sent_email = send_email($mail,"$first_name $last_name",$mail_subject,$mail_body);
$creation_message = "The account was created"; $creation_message = "The account was created";

View File

@ -9,6 +9,7 @@ function send_email($recipient_email,$recipient_name,$subject,$body) {
global $EMAIL, $SMTP, $log_prefix; global $EMAIL, $SMTP, $log_prefix;
$mail = new PHPMailer\PHPMailer\PHPMailer(); $mail = new PHPMailer\PHPMailer\PHPMailer();
$mail->CharSet = 'UTF-8';
$mail->isSMTP(); $mail->isSMTP();
$mail->SMTPDebug = $SMTP['debug_level']; $mail->SMTPDebug = $SMTP['debug_level'];
@ -29,6 +30,7 @@ function send_email($recipient_email,$recipient_name,$subject,$body) {
$mail->addAddress($recipient_email, $recipient_name); $mail->addAddress($recipient_email, $recipient_name);
$mail->Subject = $subject; $mail->Subject = $subject;
$mail->Body = $body; $mail->Body = $body;
$mail->IsHTML(true);
if (!$mail->Send()) { if (!$mail->Send()) {
error_log("$log_prefix SMTP: Unable to send email: " . $mail->ErrorInfo); error_log("$log_prefix SMTP: Unable to send email: " . $mail->ErrorInfo);