如何通过 PowerShell 使用 MailKit 发送电子邮件?
How to send email by using MailKit via PowerShell?
我在使用 mailkit 创建 Message 对象时遇到困难,因此我可以在断开连接之前添加发件人、收件人、主题和邮件正文,这些邮件可能包含要发送的附件。我已经创建了 MailKit 对象,Cancelation Token 对象。我能够使用 add-type -path 加载 MailKit 和 MimeKit dll,并且我能够连接、验证、断开连接和处理,但消息对象创建部分和发送是我需要帮助的地方。我有以下内容:
$MkSmtp = New-Object MailKit.Net.smtp.SmtpClient
$CanToken = New-Object System.Threading.CancellationToken ($false)
$SSL = [MailKit.Security.SecureSocketOptions]::SslOnConnect
$MkSmtp.Connect($MailServer, $Port, $SSL, $CanToken)
$MkSmtp.Authenticate(([System.Text.Encoding]::UTF8), $Username, $Password, $CanToken)
#$Message = New-Object ????
$MkSmtp.Send($Message)
$MkSmtp.Disconnect($true)
$MKSmtp.Dispose()
我认为答案是:
$Message = [Mimekit.MimeMessage]::new()
$Message.From.Add($From)
$Message.To.Add($To)
$Message.Subject = "Test"
$TextPart = [MimeKit.TextPart]::new("plain")
$Body = "This is just a test"
$TextPart.Text = $Body
$Message.Body = $TextPart
来自 https://www.powershellgallery.com/packages/PSGSuite/2.13.2/Content/Private%5CNew-MimeMessage.ps1。这在我的开发机器上有效,但将其投入生产会产生以下错误:
Method invocation failed because [MimeKit.MimeMessage] does not contain a method named 'new'
当它试图通过以下行时:
$Message = [Mimekit.MimeMessage]::new()
通过 add-type 和 运行 "[MimeKit.MimeMessage] | Get-Member -Static" 在 powershell 命令行上加载 dll 后在此行放置断点开发和生产服务器显示如下:
发展
生产
开发版和生产版都加载了相同的 DLL。我已经使用 Add-Type 和 System.Reflection.Assembly 加载了 DLL。生产是在 PowerShell 4.0 上,而我的开发箱是在 PowerShell 5.1 上。不知道这是否是问题所在。有人有什么想法吗?
将我们的实时服务器更新为 WIndows Management Framework 5.1 (PowerShell),现在在查看静态 Get-Member 时有了新方法。
$Message = New-Object Mimekit.MimeMessage
我在使用 mailkit 创建 Message 对象时遇到困难,因此我可以在断开连接之前添加发件人、收件人、主题和邮件正文,这些邮件可能包含要发送的附件。我已经创建了 MailKit 对象,Cancelation Token 对象。我能够使用 add-type -path 加载 MailKit 和 MimeKit dll,并且我能够连接、验证、断开连接和处理,但消息对象创建部分和发送是我需要帮助的地方。我有以下内容:
$MkSmtp = New-Object MailKit.Net.smtp.SmtpClient
$CanToken = New-Object System.Threading.CancellationToken ($false)
$SSL = [MailKit.Security.SecureSocketOptions]::SslOnConnect
$MkSmtp.Connect($MailServer, $Port, $SSL, $CanToken)
$MkSmtp.Authenticate(([System.Text.Encoding]::UTF8), $Username, $Password, $CanToken)
#$Message = New-Object ????
$MkSmtp.Send($Message)
$MkSmtp.Disconnect($true)
$MKSmtp.Dispose()
我认为答案是:
$Message = [Mimekit.MimeMessage]::new()
$Message.From.Add($From)
$Message.To.Add($To)
$Message.Subject = "Test"
$TextPart = [MimeKit.TextPart]::new("plain")
$Body = "This is just a test"
$TextPart.Text = $Body
$Message.Body = $TextPart
来自 https://www.powershellgallery.com/packages/PSGSuite/2.13.2/Content/Private%5CNew-MimeMessage.ps1。这在我的开发机器上有效,但将其投入生产会产生以下错误:
Method invocation failed because [MimeKit.MimeMessage] does not contain a method named 'new'
当它试图通过以下行时:
$Message = [Mimekit.MimeMessage]::new()
通过 add-type 和 运行 "[MimeKit.MimeMessage] | Get-Member -Static" 在 powershell 命令行上加载 dll 后在此行放置断点开发和生产服务器显示如下:
发展
生产
开发版和生产版都加载了相同的 DLL。我已经使用 Add-Type 和 System.Reflection.Assembly 加载了 DLL。生产是在 PowerShell 4.0 上,而我的开发箱是在 PowerShell 5.1 上。不知道这是否是问题所在。有人有什么想法吗?
将我们的实时服务器更新为 WIndows Management Framework 5.1 (PowerShell),现在在查看静态 Get-Member 时有了新方法。
$Message = New-Object Mimekit.MimeMessage