From 657138f477946b2c58af61bef906f78925600ba9 Mon Sep 17 00:00:00 2001 From: Hillel Coren Date: Wed, 17 Jan 2024 18:36:10 +0200 Subject: [PATCH] Custom SMTP --- lib/data/models/company_model.dart | 7 +++++-- lib/ui/settings/email_settings.dart | 31 +++++++++++++++++++++++++++++ 2 files changed, 36 insertions(+), 2 deletions(-) diff --git a/lib/data/models/company_model.dart b/lib/data/models/company_model.dart index c6e7ca4ab..78195252c 100644 --- a/lib/data/models/company_model.dart +++ b/lib/data/models/company_model.dart @@ -134,7 +134,7 @@ abstract class CompanyEntity extends Object eInvoiceCertificatePassphrase: '', smtpHost: '', smtpPort: 587, - smtpEncryption: '', + smtpEncryption: SMTP_ENCRYPTION_TLS, smtpUsername: '', smtpPassword: '', smtpLocalDomain: '', @@ -184,6 +184,9 @@ abstract class CompanyEntity extends Object static const USE_CREDITS_OPTION = 'option'; static const USE_CREDITS_OFF = 'off'; + static const SMTP_ENCRYPTION_TLS = 'TLS'; + static const SMTP_ENCRYPTION_STARTTLS = 'STARTTLS'; + @override @memoized int get hashCode; @@ -867,7 +870,7 @@ abstract class CompanyEntity extends Object ..id = '' ..smtpHost = '' ..smtpPort = 587 - ..smtpEncryption = '' + ..smtpEncryption = SMTP_ENCRYPTION_TLS ..smtpUsername = '' ..smtpPassword = '' ..smtpLocalDomain = '' diff --git a/lib/ui/settings/email_settings.dart b/lib/ui/settings/email_settings.dart index 65ee8d962..5284c8768 100644 --- a/lib/ui/settings/email_settings.dart +++ b/lib/ui/settings/email_settings.dart @@ -5,6 +5,7 @@ import 'package:flutter/material.dart'; // Package imports: import 'package:flutter_redux/flutter_redux.dart'; import 'package:invoiceninja_flutter/utils/files.dart'; +import 'package:invoiceninja_flutter/utils/formatting.dart'; import 'package:material_design_icons_flutter/material_design_icons_flutter.dart'; // Project imports: @@ -54,6 +55,7 @@ class _EmailSettingsState extends State { final _customSendingEmailController = TextEditingController(); final _eInvoiceCertificatePassphraseController = TextEditingController(); final _smtpHostController = TextEditingController(); + final _smtpPortController = TextEditingController(); final _smtpUsernameController = TextEditingController(); final _smtpPasswordController = TextEditingController(); final _smtpLocalDomainController = TextEditingController(); @@ -92,6 +94,7 @@ class _EmailSettingsState extends State { _customSendingEmailController, _eInvoiceCertificatePassphraseController, _smtpHostController, + _smtpPortController, _smtpUsernameController, _smtpPasswordController, _smtpLocalDomainController, @@ -117,6 +120,7 @@ class _EmailSettingsState extends State { _eInvoiceCertificatePassphraseController.text = company.eInvoiceCertificatePassphrase; _smtpHostController.text = company.smtpHost; + _smtpPortController.text = company.smtpPort.toString(); _smtpUsernameController.text = company.smtpUsername; _smtpPasswordController.text = company.smtpPassword; _smtpLocalDomainController.text = company.smtpLocalDomain; @@ -171,6 +175,7 @@ class _EmailSettingsState extends State { ? null : eInvoiceCertificatePassphrase ..smtpHost = _smtpHostController.text.trim() + ..smtpPort = parseInt(_smtpPortController.text.trim()) ..smtpUsername = _smtpUsernameController.text.trim() ..smtpPassword = _smtpPasswordController.text.trim() ..smtpLocalDomain = _smtpLocalDomainController.text.trim()); @@ -379,6 +384,32 @@ class _EmailSettingsState extends State { ? localization.pleaseEnterAValue : null, ), + DecoratedFormField( + label: localization.port, + controller: _smtpPortController, + keyboardType: TextInputType.number, + onSavePressed: _onSavePressed, + validator: (value) => value.trim().isEmpty + ? localization.pleaseEnterAValue + : null, + ), + AppDropdownButton( + labelText: localization.encryption, + value: company.smtpEncryption, + onChanged: (value) { + viewModel.onCompanyChanged( + company.rebuild((b) => b..smtpEncryption = value)); + }, + items: [ + DropdownMenuItem( + child: Text(CompanyEntity.SMTP_ENCRYPTION_TLS), + value: CompanyEntity.SMTP_ENCRYPTION_TLS, + ), + DropdownMenuItem( + child: Text(CompanyEntity.SMTP_ENCRYPTION_STARTTLS), + value: CompanyEntity.SMTP_ENCRYPTION_STARTTLS, + ), + ]), DecoratedFormField( label: localization.username, controller: _smtpUsernameController,