

Check out stalwart mail! Not sure it has all the features you need, but it is really flexible through scripting and has got a nice admin web-interface!
Check out stalwart mail! Not sure it has all the features you need, but it is really flexible through scripting and has got a nice admin web-interface!
Who said it was superjesus? It’s one of the smaller points on the long list of rusts advantages over other systems level PLs, but nonetheless notable. Especially if you consider that the feature that makes this possible is used for a ton of other useful stuff. And seriously, the boilerplate does matter, especially if you also add Ord, Hash and Debug impls. Your comparison with pictures in a noval makes no sense, since these add something valuable to the text and are easily distinguished from it. Heaps of boilerplate at a glance look just as meaningful as important sections of code, so being able to avoid it makes navigation significantly easier.
Isn’t it obvious? More code to skim, scroll over and maintain if something changes. If you add a struct field, your manual EQ implementation still compiles and seems to work but is wrong and will lead to bugs. Yes, solving this for 99,999% of cases with an attribute is just far superior and does make a difference (while keeping it easy to manually implement it if needed). Hash and Ord and some other traits can be implemented in a similar fashion btw…
If you need to hook it up to other stuff (where there is a solution using postfix), it’s probably easier to stick with postfix. As an all-in-one mail server I prefer stalwart over docker-mailserver, mailcow, etc. because it’s one unified software with sensible configuration instead of a clusterfuck of services put together using string and duckt tape.