【发布时间】:2021-08-07 10:14:47
【问题描述】:
我有点不知所措,需要帮助。 我正在尝试构建一个邮件集成工具,它将检查 POP3 和 IMAP4 邮箱中的电子邮件并将它们导入另一个系统。我要导入电子邮件的系统只能将附件作为 Base64 字符串处理。
我正在使用带有 Mailozaurr (https://github.com/EvotecIT/Mailozaurr) 模块的 PowerShell 7.1,Mailozaurr 在后台使用 MailKit 和 MimeKit,以便连接到 POP3 和 IMAP4 服务器并收集/下载/收集任何电子邮件。然后,我会将电子邮件的不同属性转换为 XML 对象并将其发送到系统 Web api。将电子邮件转换为 XML 对象时,需要将电子邮件中的任何附件添加到 XML 对象中:
<Attachment name="filename">base64string</sch:Attachment>
我的代码现在看起来像这样,用于收集电子邮件并枚举其属性。
$pop3BasicConnParams = @{
Server = "$($configuration.host)"
Password = "$($configuration.password)"
UserName = "$($configuration.login)"
Port = $port
}
$Client = Connect-POP @pop3BasicConnParams -Options Auto
$emailItems = Get-POPMessage -Client $Client -Index 0 -Count 1
foreach ($email in $emailItems) {
$emailProperties = @{}
$emailProperties.Add("to","$($email.to.Address)")
$emailProperties.Add("from","$($email.from.Address)")
$emailProperties.Add("subject","$($email.subject)")
$emailProperties.Add("body_plain","$($email.TextBody)")
foreach ($attachment in $email.Attachments) {
if ($attachment.IsAttachment -eq 'True') {
# code to convert attachment to base64 string
$attachmentStream = $attachment.Content.Stream
$bytes = [System.IO.StreamReader]::new($attachmentStream)
$B64String = [System.Convert]::ToBase64String($bytes)
$filename = "$($attachment.Content.Filename)"
$emailProperties.Add("$filename","$base64string")
$attachment.Content.Stream.Flush()
$attachment.Content.Stream.Dispose()
}
}
}
Disconnect-POP3 -Client $Client
由于我对 MailKit、MimeKit 或 .Net 没有任何知识或经验,我不知道如何将附件转换为 base64 字符串(用什么替换“#code to convert attachment to base64 string”)。可以请我帮忙吗?
提前致谢,安德斯。
-- 更新--
这个:$filename = "$($attachment.Content.Filename)"
应该是:$filename = "$($attachment.Filename)"
【问题讨论】:
标签: powershell mailkit mimekit