使用 Windows 任务计划程序的发送邮件操作发送 *.txt 附件时,作业失败,错误 ID 为 2147746322。
当使用 PowerShell 的 Send-MailMessage 命令以完全相同的参数发送时,邮件和附件可成功发送。
症状似乎与这里提到的相同:http://www.networksteve.com/forum/topic.php/Task_Scheduler_-_Can%27t_Send_Email/?TopicId=18073&Posts=0
答案1
经过大量调查,我们发现附加的文本文件中有一些换行符没有以回车符开头(即 \n 而不是 \r\n)。
删除这些独立的换行符可以解决问题。
如果对其他人有用,下面是删除文件中无效字符的脚本:
文件: RemoveInvalidLineBreaks.ps1
if ($args.length -gt 0 -AND
$args[0] -ne $NULL -AND
$args[0] -ne "")
{
$fn = $args[0]
(Get-Content $fn) | Set-Content $fn
}
else
{
write-error "No filename supplied"
}
用法示例:
(如果从 Windows 批处理文件调用)
powershell -ExecutionPolicy RemoteSigned ./RemoveInvalidLineBreaks.ps1 D:\TEST\myLogFile.txt
该脚本可以正常工作,因为Get-Content
当不带参数使用时-Raw
(该参数仅从 PS3 开始可用),它会一次读取文件的一行,将\r\n
和\n
都视为行尾字符;但是当写回时,Set-Content
只使用 Windows\r\n
行尾约定;因此所有换行符都会被替换。