Issue Description
We are demo-ing Stalwart with hopes of purchasing the Enterprise Edition. When configuring Stalwart 0.16.6 to use the DNSMadeEasy API to manage my zone records, the communications between the server and the DNS API seem to throw a 500 error.
Expected Behavior
The automation should create the necessary records, I would guess.
Actual Behavior
Threw this error:
Task failed during processing^[[0m (task-manager.task-failed) ^[[36mid^[[0m = 316093652308853248, ^[[36mdetails^[[0m = "DnsManagement", ^[[36mreason^[[0m = "Failed to set DNS RRSet for upwardmail.us./MX: Failed to set DNS RRSet: API error: HTTP 500: <!DOCTYPE html>\r\n<html>\r\n<head>\r\n\t<title>Management Console</title>\r\n\t\r\n\r\n\r\n <meta charset="utf-8" />\r\n\r\n\r\n\t<link rel="stylesheet" href='/V2.0/css/ui.jqgrid.css;jsessionid=D3052454C56F872403D20F645AE9BD60' type="text/css" />\r\n\t<link rel="stylesheet" href='/V2.0/css/jquery.multiselect.css;jsessionid=D3052454C56F872403D20F645AE9BD60' type="text/css" />\r\n\t<link rel="stylesheet" href='/V2.0/css/jquery.multiselect.filter.css;jsessionid=D3052454C56F872403D20F645AE9BD60' type="text/css" />\r\n\t<link rel="stylesheet" href='/V2.0/css/jquery.jqplot.min.css;jsessionid=D3052454C56F872403D20F645AE9BD60' type="text/css" />\r\n\t<link rel="stylesheet" href='/V2.0/css/jquery.dataTables.css;jsessionid=D3052454C56F872403D20F645AE9BD60' type="text/css" />\r\n\t\r\n\t<link rel="stylesheet" href='/V2.0/css/console.css;jsessionid=D3052454C56F872403D20F645AE9BD60' type="text/css" />\r\n\r\n\t<link rel="stylesheet" href='/V2.0/css/dnsme.css;jsessionid=D3052454C56F872403D20F645AE9BD60' type="text/css" title="dnsme" />\r\n\t<link rel="stylesheet" href='/V2.0/css/custom-theme/jquery-ui-1.8.14.custom.css;jsessionid=D3052454C56F872403D20F645AE9BD60' type="text/css" title="dnsme" />\r\n\t<link rel="stylesheet" href='/V2.0/css/jquery.fancybox-1.3.4.css;jsessionid=D3052454C56F872403D20F645AE9BD60' type="text/css" media="screen" />\r\n <link rel="stylesheet" href='/V2.0/css/realtime-stats/realtime-stats-chart.css;jsessionid=D3052454C56F872403D20F645AE9BD60' type="text/css" media="screen" />\r\n\r\n\t<script type="text/javascript" src='/V2.0/js/jquery-1.6.2.min.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t<script type="text/javascript" src='/V2.0/js/jquery-ui-1.8.16.custom.min.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t<script type="text/javascript" src='/V2.0/js/jquery.cookie.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t<script type="text/javascript" src='/V2.0/js/i18n/grid.locale-en.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t<script type="text/javascript" src='/V2.0/js/jquery.jqGrid.min.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t<script type="text/javascript" src='/V2.0/js/jquery.validate.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t<script type="text/javascript" src='/V2.0/js/jquery.populate.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t<script type="text/javascript" src='/V2.0/js/jquery.dropdownPlain.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t<script type="text/javascript" src='/V2.0/js/jquery.metadata.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t<script type="text/javascript" src='/V2.0/js/jquery.multiselect.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t<script type="text/javascript" src='/V2.0/js/jquery.multiselect.filter.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t<script type="text/javascript" src='/V2.0/js/jquery.diff.min.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t<script type="text/javascript" src='/V2.0/js/jquery.tinysort.min.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t<script type="text/javascript" src='/V2.0/js/jquery.fancybox-1.3.4.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t<script type="text/javascript" src='/V2.0/js/jquery.dataTables.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n\t\r\n\t\r\n\t<script type="text/javascript" src='/V2.0/js/date.js;jsessionid=D3052454C56F872403D20F645AE9BD60' ></script>\r\n <script>Date.now = function() { return +new Date; };</script>\r\n\r\n\t<script type="text/javascript" src='/V2.0/js/jquery.pagination.js;jsessionid=D3052454C56F872403D20F645AE9BD60
I don’t know how thoroughly this was tested, but Id be happy to be the guniea pig if needed to work out any bugs/kinks in it.
Thanks much!
Reproduction Steps
Configure a stalwart sever from scratch, input DNSMadeEasy API Credentials, add a zone, watch the Task for the DNS Automation Fail
Stalwart Version
v0.16.x
Installation Method
Binary (Linux)
Database Backend
PostgreSQL
Blob Storage
S3-compatible
Search Engine
PostgreSQL
Directory Backend
Internal
I have reviewed the documentation and FAQ and confirm that my issue is NOT addressed there.
on
I have searched this support forum (open and closed topics) and confirm this is not a duplicate.
on
I understand that topics in this category are triaged by a bot first but a human reply will follow up. If I’d prefer a human-only reply, I’ll add the no-ai tag to my topic.
on
I did note that DNSMadeEasy does not support TLSA records. This may be part of the troubles perhaps.
DNSMadeEasy is a contributed connector which was not tested by us as we do not have API keys for all providers.
A fix was just committed to the dns-update crate but it could not be verified. If you can install the rust toolchain and test dns-update using your API key please confirm whether the last commit fixed it.
I was able to test this code.
DME_API_KEY="###" DME_API_SECRET="##" DME_ZONE="upwardmail.us" cargo run
Updating git repository `https://github.com/stalwartlabs/dns-update`
Updating crates.io index
Locking 210 packages to latest compatible versions
Downloaded atomic-waker v1.1.2
Downloaded adler2 v2.0.1
Downloaded autocfg v1.5.1
Downloaded async-trait v0.1.89
Downloaded rustc-hash v2.1.3
Downloaded async-compression v0.4.42
Downloaded futures-io v0.3.32
Downloaded equivalent v1.0.2
Downloaded fs_extra v1.3.0
Downloaded find-msvc-tools v0.1.9
Downloaded errno v0.3.14
Downloaded hashbrown v0.17.1
Downloaded dunce v1.0.5
Downloaded pkg-config v0.3.33
Downloaded num-conv v0.2.2
Downloaded log v0.4.33
Downloaded rustls-native-certs v0.8.4
Downloaded futures-sink v0.3.32
Downloaded compression-codecs v0.4.38
Downloaded rustls-pki-types v1.15.0
Downloaded lock_api v0.4.14
Downloaded rustls-platform-verifier v0.7.0
Downloaded num-traits v0.2.19
Downloaded http-body-util v0.1.3
Downloaded rand v0.10.2
Downloaded hyper-rustls v0.27.9
Downloaded fnv v1.0.7
Downloaded futures-core v0.3.32
Downloaded getrandom v0.4.3
Downloaded powerfmt v0.2.0
Downloaded potential_utf v0.1.5
Downloaded miniz_oxide v0.8.9
Downloaded serde_urlencoded v0.7.1
Downloaded http-body v1.0.1
Downloaded displaydoc v0.2.6
Downloaded chacha20 v0.10.1
Downloaded utf8_iter v1.0.4
Downloaded idna_adapter v1.2.2
Downloaded form_urlencoded v1.2.2
Downloaded iana-time-zone v0.1.65
Downloaded stable_deref_trait v1.2.1
Downloaded subtle v2.6.1
Downloaded cfg-if v1.0.4
Downloaded lru-cache v0.1.2
Downloaded scopeguard v1.2.0
Downloaded itoa v1.0.18
Downloaded sync_wrapper v1.0.2
Downloaded compression-core v0.4.32
Downloaded zerofrom-derive v0.1.7
Downloaded yoke-derive v0.8.2
Downloaded try-lock v0.2.5
Downloaded cfg_aliases v0.2.1
Downloaded http v1.4.2
Downloaded futures-macro v0.3.32
Downloaded untrusted v0.9.0
Downloaded tinyvec_macros v0.1.1
Downloaded quote v1.0.46
Downloaded quinn-udp v0.5.15
Downloaded idna v1.1.0
Downloaded rand_pcg v0.10.2
Downloaded parking_lot v0.12.5
Downloaded litemap v0.8.2
Downloaded rand_core v0.10.1
Downloaded jobserver v0.1.35
Downloaded hex v0.4.3
Downloaded ipnet v2.12.0
Downloaded httparse v1.10.1
Downloaded getrandom v0.2.17
Downloaded cmake v0.1.58
Downloaded openssl-probe v0.2.1
Downloaded icu_collections v2.2.0
Downloaded percent-encoding v2.3.2
Downloaded critical-section v1.2.0
Downloaded once_cell v1.21.4
Downloaded icu_properties v2.2.0
Downloaded zerofrom v0.1.8
Downloaded simd-adler32 v0.3.9
Downloaded zerovec-derive v0.11.3
Downloaded synstructure v0.13.2
Downloaded smallvec v1.15.2
Downloaded quinn-proto v0.11.16
Downloaded yoke v0.8.3
Downloaded tokio-rustls v0.26.4
Downloaded tinystr v0.8.3
Downloaded pin-project-lite v0.2.17
Downloaded serde_core v1.0.228
Downloaded socket2 v0.6.4
Downloaded quinn v0.11.11
Downloaded bytes v1.12.1
Downloaded futures-task v0.3.32
Downloaded deranged v0.5.8
Downloaded cpufeatures v0.3.0
Downloaded lru-slab v0.1.2
Downloaded serde_derive v1.0.228
Downloaded futures-channel v0.3.32
Downloaded linked-hash-map v0.5.6
Downloaded icu_locale_core v2.2.0
Downloaded signal-hook-registry v1.4.8
Downloaded bitflags v2.13.0
Downloaded icu_normalizer v2.2.0
Downloaded ryu v1.0.23
Downloaded zeroize v1.9.0
Downloaded unicode-ident v1.0.24
Downloaded tinyvec v1.11.0
Downloaded parking_lot_core v0.9.12
Downloaded writeable v0.6.3
Downloaded zmij v1.0.21
Downloaded icu_provider v2.2.0
Downloaded tracing-core v0.1.36
Downloaded thiserror-impl v2.0.18
Downloaded thiserror v2.0.18
Downloaded shlex v2.0.1
Downloaded want v0.3.1
Downloaded untrusted v0.7.1
Downloaded tower-service v0.3.3
Downloaded tower-layer v0.3.3
Downloaded tokio-macros v2.7.0
Downloaded time-core v0.1.9
Downloaded slab v0.4.12
Downloaded crc32fast v1.5.0
Downloaded hyper-util v0.1.20
Downloaded flate2 v1.1.9
Downloaded proc-macro2 v1.0.106
Downloaded cc v1.2.66
Downloaded base64 v0.22.1
Downloaded hickory-net v0.26.1
Downloaded icu_normalizer_data v2.2.0
Downloaded data-encoding v2.11.0
Downloaded serde v1.0.228
Downloaded rustls-webpki v0.103.13
Downloaded memchr v2.8.3
Downloaded indexmap v2.14.0
Downloaded reqwest v0.13.4
Downloaded zerotrie v0.2.4
Downloaded hyper v1.10.1
Downloaded url v2.5.8
Downloaded tower v0.5.3
Downloaded mio v1.2.1
Downloaded serde_json v1.0.150
Downloaded futures-util v0.3.32
Downloaded zerovec v0.11.6
Downloaded portable-atomic v1.13.1
Downloaded h2 v0.4.15
Downloaded tokio-util v0.7.18
Downloaded aws-lc-rs v1.17.1
Downloaded tower-http v0.6.11
Downloaded quick-xml v0.40.1
Downloaded chrono v0.4.45
Downloaded icu_properties_data v2.2.0
Downloaded hickory-proto v0.26.1
Downloaded time v0.3.53
Downloaded syn v2.0.118
Downloaded rustls v0.23.41
Downloaded libc v0.2.186
Downloaded tracing v0.1.44
Downloaded tokio v1.52.3
Downloaded ring v0.17.14
Downloaded aws-lc-sys v0.42.0
Downloaded 158 crates (21.3MiB) in 1.00s (largest was `aws-lc-sys` at 9.2MiB)
Compiling proc-macro2 v1.0.106
Compiling quote v1.0.46
Compiling unicode-ident v1.0.24
Compiling libc v0.2.186
Compiling cfg-if v1.0.4
Compiling smallvec v1.15.2
Compiling stable_deref_trait v1.2.1
Compiling pin-project-lite v0.2.17
Compiling shlex v2.0.1
Compiling find-msvc-tools v0.1.9
Compiling portable-atomic v1.13.1
Compiling bytes v1.12.1
Compiling parking_lot_core v0.9.12
Compiling scopeguard v1.2.0
Compiling dunce v1.0.5
Compiling pkg-config v0.3.33
Compiling fs_extra v1.3.0
Compiling lock_api v0.4.14
Compiling futures-core v0.3.32
Compiling critical-section v1.2.0
Compiling itoa v1.0.18
Compiling aws-lc-rs v1.17.1
Compiling zeroize v1.9.0
Compiling litemap v0.8.2
Compiling writeable v0.6.3
Compiling icu_properties_data v2.2.0
Compiling icu_normalizer_data v2.2.0
Compiling utf8_iter v1.0.4
Compiling rustls-pki-types v1.15.0
Compiling percent-encoding v2.3.2
Compiling untrusted v0.7.1
Compiling slab v0.4.12
Compiling futures-sink v0.3.32
Compiling crc32fast v1.5.0
Compiling untrusted v0.9.0
Compiling equivalent v1.0.2
Compiling serde_core v1.0.228
Compiling rustls v0.23.41
Compiling futures-task v0.3.32
Compiling hashbrown v0.17.1
Compiling form_urlencoded v1.2.2
Compiling atomic-waker v1.1.2
Compiling adler2 v2.0.1
Compiling http v1.4.2
Compiling subtle v2.6.1
Compiling fnv v1.0.7
Compiling simd-adler32 v0.3.9
Compiling memchr v2.8.3
Compiling httparse v1.10.1
Compiling log v0.4.33
Compiling futures-channel v0.3.32
Compiling miniz_oxide v0.8.9
Compiling serde v1.0.228
Compiling once_cell v1.21.4
Compiling try-lock v0.2.5
Compiling ipnet v2.12.0
Compiling tower-service v0.3.3
Compiling rand_core v0.10.1
Compiling getrandom v0.4.3
Compiling syn v2.0.118
Compiling tracing-core v0.1.36
Compiling want v0.3.1
Compiling thiserror v2.0.18
Compiling indexmap v2.14.0
Compiling flate2 v1.1.9
Compiling compression-core v0.4.32
Compiling bitflags v2.13.0
Compiling zmij v1.0.21
Compiling jobserver v0.1.35
Compiling errno v0.3.14
Compiling signal-hook-registry v1.4.8
Compiling mio v1.2.1
Compiling socket2 v0.6.4
Compiling tracing v0.1.44
Compiling http-body v1.0.1
Compiling cpufeatures v0.3.0
Compiling autocfg v1.5.1
Compiling parking_lot v0.12.5
Compiling chacha20 v0.10.1
Compiling cc v1.2.66
Compiling compression-codecs v0.4.38
Compiling sync_wrapper v1.0.2
Compiling base64 v0.22.1
Compiling tinyvec_macros v0.1.1
Compiling num-conv v0.2.2
Compiling serde_json v1.0.150
Compiling time-core v0.1.9
Compiling deranged v0.5.8
Compiling tower-layer v0.3.3
Compiling openssl-probe v0.2.1
Compiling powerfmt v0.2.0
Compiling tinyvec v1.11.0
Compiling num-traits v0.2.19
Compiling rand v0.10.2
Compiling rustls-native-certs v0.8.4
Compiling http-body-util v0.1.3
Compiling data-encoding v2.11.0
Compiling linked-hash-map v0.5.6
Compiling iana-time-zone v0.1.65
Compiling futures-io v0.3.32
Compiling lru-cache v0.1.2
Compiling ryu v1.0.23
Compiling hex v0.4.3
Compiling cmake v0.1.58
Compiling aws-lc-sys v0.42.0
Compiling chrono v0.4.45
Compiling time v0.3.53
Compiling synstructure v0.13.2
Compiling zerofrom-derive v0.1.7
Compiling yoke-derive v0.8.2
Compiling zerovec-derive v0.11.3
Compiling displaydoc v0.2.6
Compiling tokio-macros v2.7.0
Compiling futures-macro v0.3.32
Compiling serde_derive v1.0.228
Compiling thiserror-impl v2.0.18
Compiling async-trait v0.1.89
Compiling tokio v1.52.3
Compiling zerofrom v0.1.8
Compiling futures-util v0.3.32
Compiling yoke v0.8.3
Compiling zerovec v0.11.6
Compiling zerotrie v0.2.4
Compiling tinystr v0.8.3
Compiling potential_utf v0.1.5
Compiling icu_collections v2.2.0
Compiling icu_locale_core v2.2.0
Compiling icu_provider v2.2.0
Compiling icu_normalizer v2.2.0
Compiling icu_properties v2.2.0
Compiling quick-xml v0.40.1
Compiling serde_urlencoded v0.7.1
Compiling idna_adapter v1.2.2
Compiling idna v1.1.0
Compiling url v2.5.8
Compiling tokio-util v0.7.18
Compiling tower v0.5.3
Compiling async-compression v0.4.42
Compiling h2 v0.4.15
Compiling tower-http v0.6.11
Compiling hyper v1.10.1
Compiling hyper-util v0.1.20
Compiling rustls-webpki v0.103.13
Compiling hickory-proto v0.26.1
Compiling tokio-rustls v0.26.4
Compiling rustls-platform-verifier v0.7.0
Compiling hyper-rustls v0.27.9
Compiling hickory-net v0.26.1
Compiling reqwest v0.13.4
Compiling dns-update v0.5.4 ( GitHub - stalwartlabs/dns-update: Dynamic DNS update library for Rust · GitHub )
Compiling dme-verify v0.1.0 (/home/kvedder/dme-verify)
Finished `dev` profile \[unoptimized + debuginfo\] target(s) in 33.63s
Running `target/debug/dme-verify`
Zone: upwardmail.us
Name: \_dns-update-test.upwardmail.us
\--> Creating TXT record (this is the call that used to 500)...
OK: record created without error.
\--> Cleaning up (deleting the test TXT record)...
OK: test record removed.
Result: the fix WORKS -- record creation via DNSMadeEasy succeeded.
\`\`\`
And the dig that was run before the record was removed:
ken@laptop:\~/dme-verify/src
$ dig TXT \_dns-update-test.upwardmail.us
; <<>> DiG 9.18.49-1\~deb12u1-Debian <<>> TXT \_dns-update-test.upwardmail.us
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 49927
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;\_dns-update-test.upwardmail.us. IN TXT
;; ANSWER SECTION:
\_dns-update-test.upwardmail.us. 60 IN TXT "dns-update fix verification test"
;; Query time: 46 msec
;; SERVER: 1.1.1.1#53(1.1.1.1) (UDP)
;; WHEN: Wed Jul 08 22:42:39 EDT 2026
;; MSG SIZE rcvd: 104
\`\`\`
I am NOT a rust developer, more of a python person. I hope this helps out in some meaningful way.