Custom SMTP
This commit is contained in:
parent
5d6595a86d
commit
54c41c4762
|
|
@ -127,6 +127,7 @@ abstract class SettingsEntity
|
||||||
static const EMAIL_SENDING_METHOD_MICROSOFT = 'office365';
|
static const EMAIL_SENDING_METHOD_MICROSOFT = 'office365';
|
||||||
static const EMAIL_SENDING_METHOD_POSTMARK = 'client_postmark';
|
static const EMAIL_SENDING_METHOD_POSTMARK = 'client_postmark';
|
||||||
static const EMAIL_SENDING_METHOD_MAILGUN = 'client_mailgun';
|
static const EMAIL_SENDING_METHOD_MAILGUN = 'client_mailgun';
|
||||||
|
static const EMAIL_SENDING_METHOD_SMTP = 'smtp';
|
||||||
|
|
||||||
static const LOCK_INVOICES_OFF = 'off';
|
static const LOCK_INVOICES_OFF = 'off';
|
||||||
static const LOCK_INVOICES_SENT = 'when_sent';
|
static const LOCK_INVOICES_SENT = 'when_sent';
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,10 @@ class _EmailSettingsState extends State<EmailSettings> {
|
||||||
final _mailgunDomainController = TextEditingController();
|
final _mailgunDomainController = TextEditingController();
|
||||||
final _customSendingEmailController = TextEditingController();
|
final _customSendingEmailController = TextEditingController();
|
||||||
final _eInvoiceCertificatePassphraseController = TextEditingController();
|
final _eInvoiceCertificatePassphraseController = TextEditingController();
|
||||||
|
final _smtpHostController = TextEditingController();
|
||||||
|
final _smtpUsernameController = TextEditingController();
|
||||||
|
final _smtpPasswordController = TextEditingController();
|
||||||
|
final _smtpLocalDomainController = TextEditingController();
|
||||||
|
|
||||||
List<TextEditingController> _controllers = [];
|
List<TextEditingController> _controllers = [];
|
||||||
|
|
||||||
|
|
@ -87,6 +91,10 @@ class _EmailSettingsState extends State<EmailSettings> {
|
||||||
_mailgunDomainController,
|
_mailgunDomainController,
|
||||||
_customSendingEmailController,
|
_customSendingEmailController,
|
||||||
_eInvoiceCertificatePassphraseController,
|
_eInvoiceCertificatePassphraseController,
|
||||||
|
_smtpHostController,
|
||||||
|
_smtpUsernameController,
|
||||||
|
_smtpPasswordController,
|
||||||
|
_smtpLocalDomainController,
|
||||||
];
|
];
|
||||||
|
|
||||||
_controllers
|
_controllers
|
||||||
|
|
@ -108,6 +116,10 @@ class _EmailSettingsState extends State<EmailSettings> {
|
||||||
_mailgunDomainController.text = settings.mailgunDomain ?? '';
|
_mailgunDomainController.text = settings.mailgunDomain ?? '';
|
||||||
_eInvoiceCertificatePassphraseController.text =
|
_eInvoiceCertificatePassphraseController.text =
|
||||||
company.eInvoiceCertificatePassphrase;
|
company.eInvoiceCertificatePassphrase;
|
||||||
|
_smtpHostController.text = company.smtpHost;
|
||||||
|
_smtpUsernameController.text = company.smtpUsername;
|
||||||
|
_smtpPasswordController.text = company.smtpPassword;
|
||||||
|
_smtpLocalDomainController.text = company.smtpLocalDomain;
|
||||||
|
|
||||||
_controllers
|
_controllers
|
||||||
.forEach((dynamic controller) => controller.addListener(_onChanged));
|
.forEach((dynamic controller) => controller.addListener(_onChanged));
|
||||||
|
|
@ -157,7 +169,11 @@ class _EmailSettingsState extends State<EmailSettings> {
|
||||||
..eInvoiceCertificatePassphrase =
|
..eInvoiceCertificatePassphrase =
|
||||||
isFiltered && eInvoiceCertificatePassphrase.isEmpty
|
isFiltered && eInvoiceCertificatePassphrase.isEmpty
|
||||||
? null
|
? null
|
||||||
: eInvoiceCertificatePassphrase);
|
: eInvoiceCertificatePassphrase
|
||||||
|
..smtpHost = _smtpHostController.text.trim()
|
||||||
|
..smtpUsername = _smtpUsernameController.text.trim()
|
||||||
|
..smtpPassword = _smtpPasswordController.text.trim()
|
||||||
|
..smtpLocalDomain = _smtpLocalDomainController.text.trim());
|
||||||
if (company != viewModel.company) {
|
if (company != viewModel.company) {
|
||||||
viewModel.onCompanyChanged(company);
|
viewModel.onCompanyChanged(company);
|
||||||
}
|
}
|
||||||
|
|
@ -222,6 +238,9 @@ class _EmailSettingsState extends State<EmailSettings> {
|
||||||
child: Text('Microsoft'),
|
child: Text('Microsoft'),
|
||||||
value: SettingsEntity.EMAIL_SENDING_METHOD_MICROSOFT),
|
value: SettingsEntity.EMAIL_SENDING_METHOD_MICROSOFT),
|
||||||
],
|
],
|
||||||
|
DropdownMenuItem(
|
||||||
|
child: Text('SMTP'),
|
||||||
|
value: SettingsEntity.EMAIL_SENDING_METHOD_SMTP),
|
||||||
DropdownMenuItem(
|
DropdownMenuItem(
|
||||||
child: Text('Postmark'),
|
child: Text('Postmark'),
|
||||||
value: SettingsEntity.EMAIL_SENDING_METHOD_POSTMARK),
|
value: SettingsEntity.EMAIL_SENDING_METHOD_POSTMARK),
|
||||||
|
|
@ -349,6 +368,42 @@ class _EmailSettingsState extends State<EmailSettings> {
|
||||||
value: endpoint,
|
value: endpoint,
|
||||||
))
|
))
|
||||||
.toList())
|
.toList())
|
||||||
|
] else if (settings.emailSendingMethod ==
|
||||||
|
SettingsEntity.EMAIL_SENDING_METHOD_SMTP) ...[
|
||||||
|
DecoratedFormField(
|
||||||
|
label: localization.host,
|
||||||
|
controller: _smtpHostController,
|
||||||
|
keyboardType: TextInputType.url,
|
||||||
|
onSavePressed: _onSavePressed,
|
||||||
|
validator: (value) => value.trim().isEmpty
|
||||||
|
? localization.pleaseEnterAValue
|
||||||
|
: null,
|
||||||
|
),
|
||||||
|
DecoratedFormField(
|
||||||
|
label: localization.username,
|
||||||
|
controller: _smtpUsernameController,
|
||||||
|
keyboardType: TextInputType.text,
|
||||||
|
onSavePressed: _onSavePressed,
|
||||||
|
validator: (value) => value.trim().isEmpty
|
||||||
|
? localization.pleaseEnterAValue
|
||||||
|
: null,
|
||||||
|
),
|
||||||
|
DecoratedFormField(
|
||||||
|
label: localization.password,
|
||||||
|
obscureText: true,
|
||||||
|
controller: _smtpPasswordController,
|
||||||
|
keyboardType: TextInputType.text,
|
||||||
|
onSavePressed: _onSavePressed,
|
||||||
|
validator: (value) => value.trim().isEmpty
|
||||||
|
? localization.pleaseEnterAValue
|
||||||
|
: null,
|
||||||
|
),
|
||||||
|
DecoratedFormField(
|
||||||
|
label: localization.localDomain,
|
||||||
|
controller: _smtpLocalDomainController,
|
||||||
|
keyboardType: TextInputType.url,
|
||||||
|
onSavePressed: _onSavePressed,
|
||||||
|
),
|
||||||
],
|
],
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,12 @@ mixin LocalizationsProvider on LocaleCodeAware {
|
||||||
static final Map<String, Map<String, String>> _localizedValues = {
|
static final Map<String, Map<String, String>> _localizedValues = {
|
||||||
'en': {
|
'en': {
|
||||||
// STARTER: lang key - do not remove comment
|
// STARTER: lang key - do not remove comment
|
||||||
|
'host': 'Host',
|
||||||
|
'port': 'Port',
|
||||||
|
'encryption': 'Encryption',
|
||||||
|
'local_domain': 'Local Domain',
|
||||||
|
'verify_peer': 'Verify Peer',
|
||||||
|
'username': 'Username',
|
||||||
'nordigen_help':
|
'nordigen_help':
|
||||||
'Note: connecting an account requires a GoCardless/Nordigen API key',
|
'Note: connecting an account requires a GoCardless/Nordigen API key',
|
||||||
'participant_name': 'Participant Name',
|
'participant_name': 'Participant Name',
|
||||||
|
|
@ -114232,6 +114238,30 @@ mixin LocalizationsProvider on LocaleCodeAware {
|
||||||
_localizedValues[localeCode]!['nordigen_help'] ??
|
_localizedValues[localeCode]!['nordigen_help'] ??
|
||||||
_localizedValues['en']!['nordigen_help']!;
|
_localizedValues['en']!['nordigen_help']!;
|
||||||
|
|
||||||
|
String get host =>
|
||||||
|
_localizedValues[localeCode]!['host'] ??
|
||||||
|
_localizedValues['en']!['host']!;
|
||||||
|
|
||||||
|
String get port =>
|
||||||
|
_localizedValues[localeCode]!['port'] ??
|
||||||
|
_localizedValues['en']!['port']!;
|
||||||
|
|
||||||
|
String get encryption =>
|
||||||
|
_localizedValues[localeCode]!['encryption'] ??
|
||||||
|
_localizedValues['en']!['encryption']!;
|
||||||
|
|
||||||
|
String get localDomain =>
|
||||||
|
_localizedValues[localeCode]!['local_domain'] ??
|
||||||
|
_localizedValues['en']!['local_domain']!;
|
||||||
|
|
||||||
|
String get verifyPeer =>
|
||||||
|
_localizedValues[localeCode]!['verify_peer'] ??
|
||||||
|
_localizedValues['en']!['verify_peer']!;
|
||||||
|
|
||||||
|
String get username =>
|
||||||
|
_localizedValues[localeCode]!['username'] ??
|
||||||
|
_localizedValues['en']!['username']!;
|
||||||
|
|
||||||
// STARTER: lang field - do not remove comment
|
// STARTER: lang field - do not remove comment
|
||||||
|
|
||||||
String lookup(String? key) {
|
String lookup(String? key) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue