Public/Email/Channel/Add-EmailChannel.ps1

function Add-EmailChannel {


    [CmdletBinding()]
    param (
         [Parameter(Mandatory = $true)][string]$Name        # Give the channel a name, this is the "identifier for this channel"
        ,[Parameter(Mandatory = $true)][string]$From
        ,[Parameter(Mandatory = $true)][string]$Username
        ,[Parameter(Mandatory = $true)][string]$Password
        ,[Parameter(Mandatory = $true)][string]$Host
        ,[Parameter(Mandatory = $false)][int]$Port = 587
        ,[Parameter(Mandatory = $false)][Switch]$UseSSL = $false
        #,[Parameter(Mandatory = $true)][string]$Token
    )

    begin {

    }

    process {

        # Load mailkit lib
        If ( ( Confirm-MailKitLoaded ) -eq $true ) {
            Write-Verbose "MailKit loaded successfully"
        } else {
            Write-Error $_.Exception
            throw "You need to install MailKit first. Please execute Install-Mailkit!" # TODO maybe the throw is not needed here
        }

        # Try connect to server
        try {
            Write-Verbose "Connecting to mailserver"
            $smtpClient = [MailKit.Net.Smtp.SmtpClient]::new()
            $smtpClient.Connect($Host, $Port, $UseSSL) # $SMTP.Connect('smtp.gmail.com', 587, $False)
        } catch {
            Write-Error $_.Exception
            throw "Connection to host '$( $Host )' failed!"
        }

        # Try to authenticate
        try {
            Write-Verbose "Authentication to mailserver"
            $smtpClient.Authenticate($Username, $Password) # $SMTP.Authenticate('myemail1@gmail.com', 'appspecificpassword' )
        } catch {
            Write-Error $_.Exception
            throw "Authentication to host '$( $Host )' failed!"
        }

        # Kill that connection
        $smtpClient.Disconnect($true)
        $smtpClient.Dispose()

        # This is customised for email
        $valueUseSSL = $false
        If ( $UseSSL -eq $true ) {
            $valueUseSSL = $true
        }
        $definition = [PSCustomObject]@{
            "from" = $From
            "username" = $Username
            "password" = Convert-PlaintextToSecure -String $Password
            "port" = $Port
            "host" = $Host
            "ssl" = $valueUseSSL
        }

        # Add the channel
        Add-Channel -Type "Email" -Name $Name -Definition $definition

    }

    end {

    }

}