hmail-wizard-installio / install-hmailserver.ps1
testng's picture
Create an automated script to install and configure hMailServer on Windows.
d0d4ece verified
```powershell
<#
.SYNOPSIS
Automated installation and configuration script for hMailServer
.DESCRIPTION
This PowerShell script automates the installation and initial configuration of hMailServer,
including creating a domain, user account, and configuring SMTP settings with SSL/TLS.
.NOTES
File Name : install-hmailserver.ps1
Prerequisite : PowerShell 5.1+, Windows 10/11 or Windows Server 2016+
#>
# 1. Download the latest version of hMailServer from official website
Write-Host "Downloading latest hMailServer installer..."
$downloadUrl = "https://www.hmailserver.com/download"
$tempPath = $env:TEMP
$installerPath = "$tempPath\hmailserver-latest.exe"
try {
# Get the latest download URL from the website (this may need adjustment if they change their structure)
$response = Invoke-WebRequest -Uri $downloadUrl -UseBasicParsing
$downloadLink = ($response.Links | Where-Object { $_.href -like "*hMailServer*" -and $_.href -match "\.exe$" } | Select-Object -First 1).href
if (-not $downloadLink) {
throw "Could not find download link on hMailServer website"
}
# Complete the URL if it's relative
if (-not $downloadLink.StartsWith("http")) {
$downloadLink = "https://www.hmailserver.com$downloadLink"
}
Invoke-WebRequest -Uri $downloadLink -OutFile $installerPath -UseBasicParsing
Write-Host "Download completed successfully."
}
catch {
Write-Host "Error downloading hMailServer: $_" -ForegroundColor Red
exit 1
}
# 2. Install hMailServer silently with default settings
Write-Host "Installing hMailServer..."
try {
$installArgs = "/VERYSILENT /SUPPRESSMSGBOXES /NORESTART /SP- /LOG=`"$tempPath\hmailserver_install.log`""
Start-Process -FilePath $installerPath -ArgumentList $installArgs -Wait
# Wait for service to be installed and started
Start-Sleep -Seconds 10
Write-Host "Installation completed successfully."
}
catch {
Write-Host "Error installing hMailServer: $_" -ForegroundColor Red
exit 1
}
# 3-7. Configure hMailServer using COM automation
Write-Host "Configuring hMailServer..."
try {
# Load hMailServer COM objects
$hMailApp = New-Object -ComObject hMailServer.Application
# Authenticate with the hMailServer administrator password (blank by default after install)
$hMailApp.Authenticate("Administrator", "")
# 3. Create a new domain example.com
$domain = $hMailApp.Domains.Add()
$domain.Name = "example.com"
$domain.Active = $true
$domain.Save()
Write-Host "Created domain: example.com"
# 4. Add a user test@example.com with password "Test1234"
$account = $domain.Accounts.Add()
$account.Address = "test@example.com"
$account.Password = "Test1234"
$account.Active = $true
$account.MaxSize = 100 # 100MB mailbox size
$account.Save()
Write-Host "Created user: test@example.com"
# 5. Configure SMTP to allow sending emails on port 587 with SSL/TLS
$tcpPort = $hMailApp.Settings.TCPIPPorts.Add()
$tcpPort.Address = "0.0.0.0" # Listen on all interfaces
$tcpPort.PortNumber = 587
$tcpPort.Protocol = 1 # SMTP
$tcpPort.ConnectionSecurity = 2 # SSL/TLS
$tcpPort.Save()
# Enable SMTP authentication
$hMailApp.Settings.SMTP.EnableAUTH = $true
# 6. Enable logging for SMTP activity
$hMailApp.Settings.Logging.Enabled = $true
$hMailApp.Settings.Logging.LogSMTP = $true
# Save all settings
$hMailApp.Settings.Save()
Write-Host "SMTP configured on port 587 with SSL/TLS and logging enabled."
# Restart hMailServer service to apply all changes
Restart-Service -Name "hMailServer" -Force
Write-Host "hMailServer service restarted to apply changes."
}
catch {
Write-Host "Error configuring hMailServer: $_" -ForegroundColor Red
exit 1
}
Write-Host "`nInstallation and configuration completed successfully!" -ForegroundColor Green
Write-Host "hMailServer is now running with:" -ForegroundColor Cyan
Write-Host "- Domain: example.com" -ForegroundColor Cyan
Write-Host "- User: test@example.com (password: Test1234)" -ForegroundColor Cyan
Write-Host "- SMTP on port 587 with SSL/TLS" -ForegroundColor Cyan
Write-Host "- SMTP logging enabled" -ForegroundColor Cyan
```
___METADATA_START___
{"isNew":true,"userName":"testng"}
___METADATA_END___