The upgrade should succeed.
Upgrading from Nextcloud 19 to 20 results in
web_1 | Checking for update of app mail in appstore
web_1 | Update app mail from appstore
web_1 | An unhandled exception has been thrown:
web_1 | Error: Class 'OCA\Mail\AppInfo\BootstrapSingleton' not found in /var/www/html/custom_apps/mail/lib/AppInfo/Application.php:35
web_1 | Stack trace:
web_1 | #0 /var/www/html/lib/private/ServerContainer.php(108): OCA\Mail\AppInfo\Application->__construct()
web_1 | #1 /var/www/html/lib/private/ServerContainer.php(171): OC\ServerContainer->getAppContainer('mail', 'Mail')
web_1 | #2 /var/www/html/lib/private/ServerContainer.php(138): OC\ServerContainer->getAppContainerForService('OCA\\Mail\\Migrat...')
web_1 | #3 /var/www/html/lib/private/DB/MigrationService.php(444): OC\ServerContainer->query('OCA\\Mail\\Migrat...')
web_1 | #4 /var/www/html/lib/private/DB/MigrationService.php(468): OC\DB\MigrationService->createInstance('1050Date2020062...')
web_1 | #5 /var/www/html/lib/private/DB/MigrationService.php(414): OC\DB\MigrationService->executeStep('1050Date2020062...', false)
web_1 | #6 /var/www/html/lib/private/legacy/OC_App.php(976): OC\DB\MigrationService->migrate()
web_1 | #7 /var/www/html/lib/private/Installer.php(206): OC_App::updateApp('mail')
web_1 | #8 /var/www/html/lib/private/Updater.php(452): OC\Installer->updateAppstoreApp('mail')
web_1 | #9 /var/www/html/lib/private/Updater.php(260): OC\Updater->upgradeAppStoreApps(Array)
web_1 | #10 /var/www/html/lib/private/Updater.php(130): OC\Updater->doUpgrade('20.0.0.9', '19.0.4.2')
web_1 | #11 /var/www/html/core/Command/Upgrade.php(255): OC\Updater->upgrade()
web_1 | #12 /var/www/html/3rdparty/symfony/console/Command/Command.php(255): OC\Core\Command\Upgrade->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
web_1 | #13 /var/www/html/3rdparty/symfony/console/Application.php(1000): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
web_1 | #14 /var/www/html/3rdparty/symfony/console/Application.php(271): Symfony\Component\Console\Application->doRunCommand(Object(OC\Core\Command\Upgrade), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
web_1 | #15 /var/www/html/3rdparty/symfony/console/Application.php(147): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
web_1 | #16 /var/www/html/lib/private/Console/Application.php(215): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
web_1 | #17 /var/www/html/console.php(100): OC\Console\Application->run()
web_1 | #18 /var/www/html/occ(11): require_once('/var/www/html/c...')
web_1 | #19 {main} 0/0 [>---------------------------] 0%[21-Oct-2020 15:16:27] NOTICE: fpm is running, pid 1
And Nextcloud stays in maintenance mode.
Mail app version: (see apps admin page, e.g. 0.5.3)
Mailserver or service: (e.g. Outlook, Yahoo, Gmail, Exchange,...)
Operating system: Debian 9
Web server: Nginx
Database: PostgreSQL
PHP version: (e.g. 7.0)
Nextcloud Version: 20.x
I use the nextcloud:20-fpm image after previously being on nextcloud:19-fpm
Turning off maintenance mode manually via occ gives

Trying "Start Update" now
Now that results in an error with "news", so maybe it's not an issue with mail directly.
Now I've run ./occ upgrade directly and that worked