You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求开发支持多客户端的PowerShell添加辅助邮件账户脚本

通用IMAP/SMTP账户添加PowerShell脚本

由于没有跨邮件客户端的通用PowerShell模块/cmdlet,我们需要针对MS Outlook、Windows Mail和Thunderbird分别实现配置逻辑,以下是完整脚本:

第一步:获取用户配置信息

先收集账户核心参数,所有输入均为手动配置:

# 读取账户基础信息
$emailAddress = Read-Host "请输入邮箱地址"
$username = Read-Host "请输入登录用户名(通常为邮箱地址)"
$securePassword = Read-Host "请输入登录密码" -AsSecureString
$password = [System.Net.NetworkCredential]::new("", $securePassword).Password

# 读取IMAP配置
$imapServer = Read-Host "请输入IMAP服务器地址"
$imapPort = [int](Read-Host "请输入IMAP端口")
$imapEncryption = Read-Host "请输入IMAP加密方式(可选值:SSL/TLS/None)"

# 读取SMTP配置
$smtpServer = Read-Host "请输入SMTP服务器地址"
$smtpPort = [int](Read-Host "请输入SMTP端口")
$smtpEncryption = Read-Host "请输入SMTP加密方式(可选值:SSL/TLS/None)"

第二步:检测并配置已安装的邮件客户端

1. 配置MS Outlook

通过Outlook COM对象实现账户添加,需确保Outlook已安装且当前用户有权限访问:

# 检测Outlook是否安装
try {
    $outlook = New-Object -ComObject Outlook.Application -ErrorAction Stop
    $namespace = $outlook.GetNamespace("MAPI")
    $accounts = $namespace.Accounts

    # 创建新IMAP账户(2 = olImap类型)
    $newAccount = $accounts.Add(2)
    $newAccount.DisplayName = $emailAddress
    $newAccount.UserName = $username
    $newAccount.Password = $password
    $newAccount.SmtpAddress = $emailAddress

    # 配置IMAP服务器
    $imapSettings = $newAccount.IMAPAccountSettings
    $imapSettings.Server = $imapServer
    $imapSettings.Port = $imapPort
    switch ($imapEncryption.ToLower()) {
        "ssl" { $imapSettings.SSL = $true }
        "tls" { $imapSettings.SSL = $true } # Outlook将TLS归为SSL范畴
        "none" { $imapSettings.SSL = $false }
    }
    $imapSettings.Save()

    # 配置SMTP服务器
    $smtpSettings = $newAccount.SMTPAccountSettings
    $smtpSettings.Server = $smtpServer
    $smtpSettings.Port = $smtpPort
    switch ($smtpEncryption.ToLower()) {
        "ssl" { $smtpSettings.SSL = $true }
        "tls" { $smtpSettings.SSL = $true }
        "none" { $smtpSettings.SSL = $false }
    }
    $smtpSettings.Authentication = 1 # 1 = 基础认证
    $smtpSettings.Save()

    Write-Host "Outlook账户添加成功"
    # 释放COM对象避免内存泄漏
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($imapSettings) | Out-Null
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($smtpSettings) | Out-Null
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($newAccount) | Out-Null
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($accounts) | Out-Null
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($namespace) | Out-Null
    [System.Runtime.Interopservices.Marshal]::ReleaseComObject($outlook) | Out-Null
}
catch {
    Write-Host "Outlook未安装或无法访问:$_"
}

2. 配置Windows Mail(UWP邮件应用)

通过Windows Runtime API实现账户添加,仅支持Windows 10及以上版本:

# 检测Windows Mail是否安装
$mailAppPath = Get-ChildItem "C:\Program Files\WindowsApps\microsoft.windowscommunicationsapps_*" | Select-Object -First 1
if ($mailAppPath) {
    try {
        # 加载Windows Runtime邮件账户管理组件
        Add-Type -AssemblyName Windows.ApplicationModel.Email -ErrorAction Stop

        # 创建邮件账户对象
        $emailAccount = New-Object Windows.ApplicationModel.Email.EmailAccount
        $emailAccount.Id = [Guid]::NewGuid().ToString()
        $emailAccount.DisplayName = $emailAddress
        $emailAccount.UserName = $username
        $emailAccount.Password = $password
        $emailAccount.EmailAddress = $emailAddress

        # 配置IMAP端点
        $imapEndpoint = New-Object Windows.ApplicationModel.Email.EmailMailServer
        $imapEndpoint.HostName = $imapServer
        $imapEndpoint.Port = $imapPort
        switch ($imapEncryption.ToLower()) {
            "ssl" { $imapEndpoint.SocketSslPolicy = [Windows.ApplicationModel.Email.EmailSocketSslPolicy]::SslRequired }
            "tls" { $imapEndpoint.SocketSslPolicy = [Windows.ApplicationModel.Email.EmailSocketSslPolicy]::TlsRequired }
            "none" { $imapEndpoint.SocketSslPolicy = [Windows.ApplicationModel.Email.EmailSocketSslPolicy]::Unencrypted }
        }
        $imapEndpoint.AuthenticationType = [Windows.ApplicationModel.Email.EmailAuthenticationType]::Basic
        $emailAccount.IncomingMailServer = $imapEndpoint
        $emailAccount.IncomingMailServerType = [Windows.ApplicationModel.Email.EmailAccountServerType]::Imap

        # 配置SMTP端点
        $smtpEndpoint = New-Object Windows.ApplicationModel.Email.EmailMailServer
        $smtpEndpoint.HostName = $smtpServer
        $smtpEndpoint.Port = $smtpPort
        switch ($smtpEncryption.ToLower()) {
            "ssl" { $smtpEndpoint.SocketSslPolicy = [Windows.ApplicationModel.Email.EmailSocketSslPolicy]::SslRequired }
            "tls" { $smtpEndpoint.SocketSslPolicy = [Windows.ApplicationModel.Email.EmailSocketSslPolicy]::TlsRequired }
            "none" { $smtpEndpoint.SocketSslPolicy = [Windows.ApplicationModel.Email.EmailSocketSslPolicy]::Unencrypted }
        }
        $smtpEndpoint.AuthenticationType = [Windows.ApplicationModel.Email.EmailAuthenticationType]::Basic
        $smtpEndpoint.UserName = $username
        $smtpEndpoint.Password = $password
        $emailAccount.OutgoingMailServer = $smtpEndpoint

        # 同步执行异步添加操作
        $addTask = [Windows.ApplicationModel.Email.EmailAccountManager]::AddAsync($emailAccount)
        $addTask.GetAwaiter().GetResult()

        Write-Host "Windows Mail账户添加成功"
    }
    catch {
        Write-Host "Windows Mail配置失败:$_"
    }
}
else {
    Write-Host "Windows Mail未安装"
}

3. 配置Thunderbird

通过修改Thunderbird配置文件实现,需定位用户的Thunderbird配置目录:

# 检测Thunderbird是否安装
$thunderbirdPath = "C:\Program Files\Mozilla Thunderbird\thunderbird.exe"
if (Test-Path $thunderbirdPath) {
    try {
        # 获取Thunderbird配置文件路径
        $thunderbirdIni = "$env:APPDATA\Thunderbird\profiles.ini"
        if (-not (Test-Path $thunderbirdIni)) {
            throw "Thunderbird配置文件未找到,请先启动一次Thunderbird"
        }
        $profileSection = Get-Content $thunderbirdIni | Select-String -Pattern "\[Profile\d+\]" -Context 0,3
        $profilePath = $profileSection.Context.PostContext | Where-Object { $_ -match "^Path=(.*)" } | ForEach-Object { $matches[1] }
        $profileFullPath = if ($profilePath.StartsWith("\\")) { "$env:APPDATA\Thunderbird\$profilePath" } else { $profilePath }

        # 修改accounts.ini添加账户条目
        $accountsIni = "$profileFullPath\accounts.ini"
        $accountId = [Guid]::NewGuid().ToString().Replace("-", "")
        $newAccountIniContent = @"
[Account$accountId]
Name=$emailAddress
Server=imap://$username@$imapServer/
Server2=smtp://$username@$smtpServer/
IncomingServer=$accountId
OutgoingServer=$accountId-smtp
"@
        Add-Content -Path $accountsIni -Value $newAccountIniContent -Encoding UTF8

        # 修改prefs.js添加IMAP/SMTP配置参数
        $prefsJs = "$profileFullPath\prefs.js"
        $imapPrefs = @"
user_pref("mail.server.server$accountId.hostname", "$imapServer");
user_pref("mail.server.server$accountId.port", $imapPort);
user_pref("mail.server.server$accountId.type", "imap");
user_pref("mail.server.server$accountId.userName", "$username");
user_pref("mail.server.server$accountId.socketType", "$(if ($imapEncryption -in 'SSL','TLS') { 'SSL' } else { 'plain' })");
user_pref("mail.server.server$accountId.authMethod", "1"); // 1 = 基础认证

user_pref("mail.smtpserver.server$accountId-smtp.hostname", "$smtpServer");
user_pref("mail.smtpserver.server$accountId-smtp.port", $smtpPort);
user_pref("mail.smtpserver.server$accountId-smtp.userName", "$username");
user_pref("mail.smtpserver.server$accountId-smtp.socketType", "$(if ($smtpEncryption -in 'SSL','TLS') { 'SSL' } else { 'plain' })");
user_pref("mail.smtpserver.server$accountId-smtp.authMethod", "1");
"@
        Add-Content -Path $prefsJs -Value $imapPrefs -Encoding UTF8

        Write-Host "Thunderbird配置文件已更新,请启动Thunderbird并完成密码验证"
    }
    catch {
        Write-Host "Thunderbird配置失败:$_"
    }
}
else {
    Write-Host "Thunderbird未安装"
}

注意事项

  • Outlook:需以当前用户身份运行脚本,避免COM对象权限问题;若Outlook已运行,脚本可直接修改配置。
  • Windows Mail:仅支持Windows 10及以上版本,部分系统可能需要启用WinRT API访问权限。
  • Thunderbird:脚本仅修改配置文件,密码需用户首次启动Thunderbird时手动输入(因Thunderbird密码存储为加密格式,无法直接通过脚本写入)。

内容的提问来源于stack exchange,提问作者Dario Corrada

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:05:42