Powershell 将CSV字符串附加到电子邮件
我正在尝试将CSV数据附加到电子邮件,但“发送邮件”不接受它作为-attachment参数。我希望避免创建文件。有没有办法将内容直接作为附件发送到电子邮件Powershell 将CSV字符串附加到电子邮件,powershell,Powershell,我正在尝试将CSV数据附加到电子邮件,但“发送邮件”不接受它作为-attachment参数。我希望避免创建文件。有没有办法将内容直接作为附件发送到电子邮件 $attachment = $DataSet.Tables[0] | ConvertTo-Csv -NoTypeInformation Send-MailMessage -From $from -To $to -Subject $subject -Body $emailbody ... -Attachments $attachm
$attachment = $DataSet.Tables[0] | ConvertTo-Csv -NoTypeInformation
Send-MailMessage
-From $from
-To $to
-Subject $subject
-Body $emailbody
...
-Attachments $attachment
不,无论如何都不要使用
发送邮件
-Attachments
参数接受文件路径,而不是任意字符串数据:
# create a temp file
$tmpFile = [System.IO.Path]::GetTempFileName()
# export data to file
$DataSet.Tables[0] | Export-Csv -NoTypeInformation -Path $tmpFile.FullName
# rename to something sensible
$tmpFile = (Rename-Item $tmpFile -NewName "report.csv" -PassThru).FullName
# send mail
Send-MailMessage ... -Attachments $tmpFile
# clean up
Remove-Item $tmpFile
如果您不介意手动执行大部分Send MailMessage
,则可以从内存创建附件,而无需将其写入磁盘:
$msg=[System.Net.Mail.MailMessage]::new()
# ...
$attachmentData=$DataSet.Tables[0]|转换为Csv-NoTypeInformation
$attachment=[System.Net.Mail.attachment]::CreateAttachmentFromString(($attachmentData-join[environment]::NewLine),“report.csv”)
$msg.Attachments.Add($attachment)
# ...
不,无论如何都不要使用发送邮件
-Attachments
参数接受文件路径,而不是任意字符串数据:
# create a temp file
$tmpFile = [System.IO.Path]::GetTempFileName()
# export data to file
$DataSet.Tables[0] | Export-Csv -NoTypeInformation -Path $tmpFile.FullName
# rename to something sensible
$tmpFile = (Rename-Item $tmpFile -NewName "report.csv" -PassThru).FullName
# send mail
Send-MailMessage ... -Attachments $tmpFile
# clean up
Remove-Item $tmpFile
如果您不介意手动执行大部分Send MailMessage
,则可以从内存创建附件,而无需将其写入磁盘:
$msg=[System.Net.Mail.MailMessage]::new()
# ...
$attachmentData=$DataSet.Tables[0]|转换为Csv-NoTypeInformation
$attachment=[System.Net.Mail.attachment]::CreateAttachmentFromString(($attachmentData-join[environment]::NewLine),“report.csv”)
$msg.Attachments.Add($attachment)
# ...
但如果我使用导出CSV自动创建临时文件,不是吗?我本来希望不创建任何文件就可以做到这一点。@John正如我在顶部提到的,-Attachments
只接受文件路径,因此实际上没有任何办法:)您是否试图避免清理临时文件或类似的东西?如果不在某处写入文件,您将无法创建文件并将其附加到电子邮件。“某处”可以是内存,如果你想处理所有的开销,但除非没有其他选项,否则它会带来更多的麻烦。@John在答案中添加了一个无文件选项(我很久没有使用邮件API了,所以不确定在不指定内容类型的情况下这是否有效)!但是,生成的excel文件的列名和数据位于同一行。这是应该在查询级别格式化的内容吗?我假设字符串形式的CSV缺少导出到文件时所具有的excel样式格式,但如果使用自动创建临时文件的导出CSV,不是吗?我本来希望不创建任何文件就可以做到这一点。@John正如我在顶部提到的,-Attachments
只接受文件路径,因此实际上没有任何办法:)您是否试图避免清理临时文件或类似的东西?如果不在某处写入文件,您将无法创建文件并将其附加到电子邮件。“某处”可以是内存,如果你想处理所有的开销,但除非没有其他选项,否则它会带来更多的麻烦。@John在答案中添加了一个无文件选项(我很久没有使用邮件API了,所以不确定在不指定内容类型的情况下这是否有效)!但是,生成的excel文件的列名和数据位于同一行。这是应该在查询级别格式化的内容吗?我假设字符串形式的CSV缺少excel样式的格式,当您将其导出到文件时,它会有这种格式吗?