【发布时间】:2021-07-06 22:03:34
【问题描述】:
目标是什么 - 在没有客户/用户干预的情况下自动编程 Outlook 配置文件。他们应该只需点击 Outlook 并首次显示电子邮件。无需为最终用户设置或配置。
我为一个拥有大约 70 个客户的 MSP 工作。每个客户都使用 Office E3 许可证用于办公应用程序,但他们使用第三方公司进行电子邮件托管(中间/服务器数据)。
这种特殊差异使得使用 ZeroConfigExchange 根据自动发现和 AD 用户的 smtp 地址自动设置 Outlook 配置文件非常困难。 用户使用 Azure AD 连接到计算机,但 Azure AD不知道用户的 smtp 地址是什么,因为他们没有与 microsoft 进行在线交换,而是与 intermedia/serverdata 进行了在线交换。
所以我一直在努力寻找任何方法来根据电子邮件地址、服务器地址和凭据自动创建 Outlook 配置文件;这样当用户第一次使用该设备时,它会将 Outlook 配置文件添加到该帐户。
我调查的内容:
仍然尝试 ZeroConfigExchange - 失败 - 它不知道用于创建配置文件的 smtp 信息在哪里。
尝试使用 PowerMapi 的 New-MapiProfile - 失败 - 从这里发现:https://superuser.com/questions/1141519/configuring-outlook-with-powershell 这在 office 2016 或 office 365 上不起作用,因为它们更改了凭据设置
尝试使用 O365 配置工具制作包含电子邮件配置文件的定制版 Office 应用程序 - 失败了 - 显然他们将此功能从较新的 O365 配置工具中移除。根据我的研究,这曾经出现在旧版本中,但现在不再存在: (我没有足够的图片代表点,所以这里是我的图片的链接) https://i.ibb.co/jftNVg2/help1.pnghttps://i.ibb.co/8ggz5hg/help2.png
尝试使用我从这里找到的这个 powershell 脚本:
$continue = [System.Windows.Forms.MessageBox]::Show("This will delete any outlook profile on your machine. Do you want to continue?", "Continue?", 'YesNo', 'Question')
if ($continue -eq "Yes")
{
# Create Outlook COM instance
Add-Type -assembly "Microsoft.Office.Interop.Outlook"
$Outlook = New-Object -comobject Outlook.Application
$namespace = $outlook.GetNameSpace('MAPI')
$outbox = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderOutbox)
$Drafts = $namespace.GetDefaultFolder([Microsoft.Office.Interop.Outlook.OlDefaultFolders]::olFolderDrafts)
do
{
$set = $outbox.Items
foreach ($item in $set)
{
[void]$item.move($Drafts)
}
Start-Sleep -Seconds 3 | Out-Null
}
while ($outbox.items.count -ne 0)
# Quick rest before killing COM
Start-Sleep -Seconds 3 | Out-Null
# Kill Outlook COM instance
$outlook.Quit() | Out-Null
[System.Runtime.InteropServices.Marshal]::ReleaseComObject($outlook) | Out-Null
if (Get-Process outlook)
{
Get-Process outlook | Stop-Process | Out-Null
}
if (Test-Path "$Env:appdata\Microsoft\Outlook\")
{
Try
{
$void = Remove-Item "$Env:appdata\Microsoft\Outlook\" -force -recurse | Out-Null
}
Catch
{
[void][System.Windows.Forms.MessageBox]::Show("A file was still in use, try again.", "Information", 'OK', 'Error')
}
}
if (Test-Path HKCU:\Software\Microsoft\Office\16.0\Outlook)
{
#New-ItemProperty -Path HKCU:\Software\Microsoft\Office\16.0\Outlook\AutoDiscover -Name ZeroConfigExchange -Value 1 -PropertyType DWORD -Force
Remove-Item "HKCU:\Software\Microsoft\Office\16.0\Outlook\Profiles\*" -Recurse -Force | Out-Null
Remove-ItemProperty -Path HKCU:\Software\Microsoft\Office\16.0\Outlook\Setup\ -name First-Run | Out-Null
Start-Process 'C:\Program Files (x86)\Microsoft Office\root\Office16\outlook.exe' | Out-Null
}
else
{
#do nothing
}
}
else
{
[void][System.Windows.Forms.MessageBox]::Show("Nothing was done", "Information", 'OK', 'Information')
}
这能够显示电子邮件设置的提示,但无论如何要将其包含在此 powershell 脚本中?
我也尝试了一点她的 mfcmapi 应用e:https://docs.microsoft.com/en-us/office/client-developer/outlook/mapi/how-to-create-an-outlook-profile-using-mfcmapi
但是我只是按照微软的文档和研究随机错误并没有真正让我走得太远。看起来好像 mfcmapi 完全坏了。
我昨天也在这里问过这个问题:https://superuser.com/questions/1640825/autoconfigure-m365-outlook-profile,但我在这个线程中添加了更多我的故障排除方法。我还将向 Microsoft 提出支持请求,看看是否有任何想法。
如果我找到其他人的好答案,我会告诉大家。
感谢您的宝贵时间,
【问题讨论】:
-
我不确定 O365,但在我们的域环境中,我们的交换邮箱链接到 AD。因此,在 AD 中的用户帐户中填充电子邮件部分,是在用户首次登录时完成的
-
是的,但这仅适用于 Azure AD。 On-prem 将像其 Azure AD 与 Microsoft 在线交换一样工作,因为两者都使用 AD 从属性中查找 smtp 地址。如果您有 Azure AD,没有本地部署,并使用另一台计算机(如 google、intermedia、bluehost 等)进行交换,那么您似乎很不走运。
标签: azure powershell email outlook