TF-2667 Validate email in recipient form before send email

This commit is contained in:
dab246
2024-03-19 00:54:21 +07:00
committed by Dat H. Pham
parent c013e0306c
commit dbbbf7d856
8 changed files with 597 additions and 4 deletions
@@ -68,6 +68,7 @@ import 'package:tmail_ui_user/features/email/domain/state/transform_html_email_c
import 'package:tmail_ui_user/features/email/domain/usecases/get_email_content_interactor.dart';
import 'package:tmail_ui_user/features/email/domain/usecases/transform_html_email_content_interactor.dart';
import 'package:tmail_ui_user/features/email/presentation/model/composer_arguments.dart';
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/domain/usecases/remove_composer_cache_on_web_interactor.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/controller/mailbox_dashboard_controller.dart';
import 'package:tmail_ui_user/features/mailbox_dashboard/presentation/model/draggable_app_state.dart';
@@ -721,7 +722,7 @@ class ComposerController extends BaseController with DragDropFileMixin {
final allListEmailAddress = listToEmailAddress + listCcEmailAddress + listBccEmailAddress;
final listEmailAddressInvalid = allListEmailAddress
.where((emailAddress) => !GetUtils.isEmail(emailAddress.emailAddress))
.where((emailAddress) => !EmailUtils.isEmailAddressValid(emailAddress.emailAddress))
.toList();
if (listEmailAddressInvalid.isNotEmpty) {
showConfirmDialogAction(context,
@@ -16,6 +16,7 @@ import 'package:tmail_ui_user/features/composer/presentation/model/draggable_ema
import 'package:tmail_ui_user/features/composer/presentation/styles/recipient_tag_item_widget_style.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/draggable_recipient_tag_widget.dart';
import 'package:tmail_ui_user/features/composer/presentation/widgets/recipient_composer_widget.dart';
import 'package:tmail_ui_user/features/email/presentation/utils/email_utils.dart';
class RecipientTagItemWidget extends StatelessWidget {
@@ -172,7 +173,7 @@ class RecipientTagItemWidget extends StatelessWidget {
Color _getTagBackgroundColor() {
if (isLatestTagFocused && isLatestEmail) {
return AppColor.colorItemRecipientSelected;
} else if (GetUtils.isEmail(currentEmailAddress.emailAddress)) {
} else if (EmailUtils.isEmailAddressValid(currentEmailAddress.emailAddress)) {
return AppColor.colorEmailAddressTag;
} else {
return Colors.white;
@@ -182,7 +183,7 @@ class RecipientTagItemWidget extends StatelessWidget {
BorderSide _getTagBorderSide() {
if (isLatestTagFocused && isLatestEmail) {
return const BorderSide(width: 1, color: AppColor.primaryColor);
} else if (GetUtils.isEmail(currentEmailAddress.emailAddress)) {
} else if (EmailUtils.isEmailAddressValid(currentEmailAddress.emailAddress)) {
return const BorderSide(width: 1, color: AppColor.colorEmailAddressTag);
} else {
return const BorderSide(
@@ -68,7 +68,16 @@ class EmailUtils {
required String internalDomain
}) {
log('EmailUtils::isSameDomain: emailAddress = $emailAddress | internalDomain = $internalDomain');
return GetUtils.isEmail(emailAddress) &&
return EmailUtils.isEmailAddressValid(emailAddress) &&
emailAddress.split('@').last.toLowerCase() == internalDomain.toLowerCase();
}
static bool isEmailAddressValid(String address) {
try {
return GetUtils.isEmail(address) && MailAddress.validate(address).asString().isNotEmpty;
} catch(e) {
logError('EmailUtils::isEmailAddressValid: Exception = $e');
return false;
}
}
}