Odin (formerly Parallels) develops hosting, automation and billing systems for service providers.
Many of our customers uses the Halon platform as a premium anti-spam in front of Odin servers such as Plesk. There are numerous different integration opportunities, and our official plugins only scratch the surface of what's possible. Most advanced integration are co-developed by us and the hosting provider, on a project basis.
APS2 one-click end-user login
Several method can be used to implement routing (typically domain-to-server mappings) in the Halon SMTP server, including scripted dns() queries. The Halon nodes can also be configured to make API calls via the scripting language to the databases in for example Odin's PBAS or PPA servers via a simple REST API, such as
$dbh = new PDO('mysql:host=ppa1.example.com;dbname=psa', 'servicelocator', 'secret');
$res = $dbh->prepare(...); // the query
if (!$res->execute([':domain' => $_GET['domain']]))
die(); // db is down
$row = $res->fetch(PDO::FETCH_ASSOC);
die(json_encode(array('action' => 'reject')));
die(json_encode(array('host' => $row['ip'])));
We've done numerous such integrations, and can help you tailor the systems to fit perfectly.
The Plesk Automation database can be used to perform domain-to-Plesk server mapping via a query such as
SELECT ip.public_ip_address AS ip FROM DomainServices AS ds INNER JOIN IpAddressesCollections AS i ON ds.ipCollectionId = i.ipCollectionId INNER JOIN IP_Addresses AS ip ON i.ipAddressId = ip.id INNER JOIN domains AS d ON d.id = ds.dom_id WHERE ds.type = "mail" and ds.status = 0 and d.name = :domain
where domains can be replaced with domain_aliases if there was no match with the first query.
The Business Automation database can be used to perform domain-to-Plesk server mapping via a query such as
SELECT ip_address FROM plesk_domain_cache AS domain INNER JOIN hw ON hw.hw_id = domain.hw_id WHERE plesk_name = :domain ORDER BY domain.status = 3 DESC LIMIT 1;
where plesk_domain_cache can be replaced with plesk_domainalias_cache if there was no match with the first query.