diff --git a/string_utils/string_utils.go b/string_utils/string_utils.go
index 67bd3de4a71ef1ccdaa526bcc175ef2805841112..95e9b5eb4e1a2435a71db2d1b93d780c3b8daca0 100644
--- a/string_utils/string_utils.go
+++ b/string_utils/string_utils.go
@@ -3,6 +3,8 @@ package string_utils
 import (
 	"encoding/json"
 	"fmt"
+	"gitlab.bob.co.za/bob-public-utils/bobgroup-go-utils/errors"
+	"net/mail"
 	"net/url"
 	"regexp"
 	"strconv"
@@ -307,11 +309,18 @@ func StripQueryString(inputUrl string) (string, error) {
 	return u.String(), nil
 }
 
-func IsValidEmail(email string) bool {
-	// Found here: https://stackoverflow.com/questions/201323/how-can-i-validate-an-email-address-using-a-regular-expression
-	regex, _ := regexp.Compile("(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|\"(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21\\x23-\\x5b\\x5d-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])*\")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\\[(?:(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9]))\\.){3}(?:(2(5[0-5]|[0-4][0-9])|1[0-9][0-9]|[1-9]?[0-9])|[a-z0-9-]*[a-z0-9]:(?:[\\x01-\\x08\\x0b\\x0c\\x0e-\\x1f\\x21-\\x5a\\x53-\\x7f]|\\\\[\\x01-\\x09\\x0b\\x0c\\x0e-\\x7f])+)\\])")
-	isValidEmail := regex.MatchString(email)
-	return isValidEmail
+func ValidateEmailAddress(email string) (string, error) {
+	if email == "" {
+		return "", errors.Error("email address is empty")
+	}
+
+	// We validate it but still return it since in some cases we don't want to break everything if the email is bad
+	_, err := mail.ParseAddress(email)
+	if err != nil {
+		return strings.ToLower(strings.TrimSpace(email)), errors.Wrap(err, "could not parse email address")
+	}
+
+	return strings.ToLower(strings.TrimSpace(email)), nil
 }
 
 func PascalCaseToSentence(pascal string) string {