【问题标题】:CRLF stripped from multiline string sent as email body从作为电子邮件正文发送的多行字符串中剥离的 CRLF
【发布时间】:2015-03-15 00:59:41
【问题描述】:

我正在从我们的 MSSQL HR 数据库中提取数据并运行一个 foreach 循环,并将行集中的各个字段与用户的 AD 属性进行比较。这工作正常。在这个循环中,当我继续记录我对每个用户所做的事情时,我还附加到一个字符串,并且还记录了一条错误消息。例如:

foreach ($user in $users) {
    # Try and find the AD User
    $ADUser = $(try {Get-ADUser $user.SamAccountName -Properties Office,OfficePhone,MobilePhone,Department,Title,City,PostalCode,StreetAddress} catch {$null})

    #Check if we found it
    if ($ADuser -ne $null) {
        $ADUpdated = $false

        #We did so check the HR data too before we try and use it
        if (-Not ([string]::IsNullOrEmpty($user.Title))) {
            if (($user.Title -ne $ADUser.Title)) { #Check if we need to update 
                # Update the Job Title attribute
                Write-Verbose ("Updating Job Title to " + $user.Title + " for " + $user.SamAccountName + " (" + $user.DisplayName + ")")
                Set-ADUser $user.SamAccountName -Title $user.Title
                $messagebody += "Updating Job Title to " + $user.Title + " for " + $user.SamAccountName + " (" + $user.DisplayName + ")" + " `r`n"
                $ADtitleUpdated++
                $ADUpdated = $true
            }
        } else {
            #HR Database is wrong
            $HRnoTitle++
            $messagebody += "Missing Job Title in HR Record for " + $user.DisplayName  + " `r`n"
            Write-Warning ("Missing Job Title in HR Record for " + $user.DisplayName)
            if ($ADUpdated) {$ADrecordsUpdated++}
        }
    else {
        #User is missing in AD but Exists in HR Database
        $ADmissing++
        Write-Warning ($user.SamAccountName + " (" + $user.DisplayName + ")" + " exists in HR Database but doesn't in AD!")
        $messagebody += $user.SamAccountName + " (" + $user.DisplayName + ")" + " exists in HR Database but doesn't in AD!`r`n"
    }

所以$messagebody 有一个多行字符串,告诉我人力资源数据库中的用户记录是否存在问题,或者是否存在任何 AD 帐户。当我用Write-Host 打印出来时,我得到了正确的信息。但是,当我通过Send-MailMessage 发送此信息时,缺少 CRLF。我可以做些什么来保存 CRLF?邮件客户端是 Outlook 2010。

【问题讨论】:

  • 不是你必须这样做,而是你在我们看不到的任何地方声明了$messagebody?在脚本的结尾,这个$messagebody.GetType().FullName 的结果是什么?我想知道它是否是一个字符串数组,应该是一个字符串。
  • @GeoffKing 您提供给我们的代码中没有Send-MailMessage 行。此外,您似乎在该示例中的几个地方缺少闭包花括号 (})
  • 好的,这是我的脚本@Matt $messagebody = @" AD Import From HR Database Results "@Send-MailMessage -From $smtpFrom -To $smtpTo -Subject $messageSubject -Body $messagebody -SmtpServer $smtpServer 中的额外代码位,代码标签错过了一个}。该代码确实有效。我只是没有全部展示。
  • @matt $messagebody.GetType().FullName 返回为System.String
  • MailMessage sent string as body without newline in outlook 的可能副本。有点解释了这个问题和一些解决它的好方法。不是 powershell 问题。

标签: powershell powershell-2.0


【解决方案1】:

@Matt 是正确的。根据MailMessage sent string as body without newline in outlook,我只需要在输出中添加一些标点符号。我将 " `r`n" 更改为 ". `r`n" 并确保我的 Here-Strings 中的所有行都以标点符号结尾。

【讨论】:

    猜你喜欢
    • 2020-01-12
    • 1970-01-01
    • 2017-01-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 2015-08-08
    • 2018-11-21
    相关资源
    最近更新 更多