【发布时间】:2017-07-27 05:54:40
【问题描述】:
一直在寻找一些代码来截取屏幕截图并将屏幕截图附加到新电子邮件中。我会发布我所拥有的。它可以工作 99%,只是我一生都无法弄清楚为什么它没有附加到电子邮件中。
除了将新的屏幕截图附加到电子邮件之外,它会执行所有操作。这可能吗?
Private Sub testStripMenuItem_Click(sender As Object, e As EventArgs) Handles testStripMenuItem.Click
Dim maxHeight As Integer = 0
Dim maxWidth As Integer = 0
For Each scr As Screen In Screen.AllScreens
maxWidth += scr.Bounds.Width
If scr.Bounds.Height > maxHeight Then maxHeight = scr.Bounds.Height
Next
Dim AllScreensCapture As New Bitmap(maxWidth, maxHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb)
Dim screenGrab As Bitmap
Dim screenSize As Size
Dim g As Graphics
Dim g2 As Graphics = Graphics.FromImage(AllScreensCapture)
Dim a As New Point(0, 0)
For Each scr As Screen In Screen.AllScreens
screenSize = New Size(scr.Bounds.Width, scr.Bounds.Height)
screenGrab = New Bitmap(scr.Bounds.Width, scr.Bounds.Height)
g = Graphics.FromImage(screenGrab)
g.CopyFromScreen(a, New Point(0, 0), screenSize)
g2.DrawImage(screenGrab, a)
a.X += scr.Bounds.Width
Next
Dim Screenshot = "C:\img.png"
If System.IO.File.Exists(Screenshot) Then
System.IO.File.Delete(Screenshot)
End If
AllScreensCapture.Save(Screenshot, System.Drawing.Imaging.ImageFormat.Jpeg)
'Email Code
Dim strUserDomain As String
Dim strCompName As String
strUserDomain = Environ$("UserDomain")
strCompName = Environ$("ComputerName")
Dim theStringBuilder As New StringBuilder()
theStringBuilder.Append("mailto:email@gmail.com.au")
theStringBuilder.Append("&subject=From Domain: " & strUserDomain & ". Computer Name: " & strCompName)
theStringBuilder.Append("&attach=" & Screenshot)
Process.Start(theStringBuilder.ToString())
End Sub
【问题讨论】:
-
虽然 mailto 协议在技术上支持它,但我从未能够以这种方式将文件附加到新邮件,所以我认为 Outlook 不支持它。其他一些邮件客户端可能会这样做,但我希望这是一种安全措施,强制用户选择要附加的任何文件,这样应用程序就不会恶意地这样做。
-
@jmcilhinney 这很有道理,我还能研究其他方法吗?
-
您所拥有的应该适用于任何邮件客户端,尽管“工作”不一定包括附加文件。如果您知道客户端始终是 Outlook,那么您可以改用 Office 自动化。它更复杂,但允许您执行 Outlook 对象模型允许的任何操作。
-
通过用户的默认邮件客户端发送电子邮件是一项严格的要求,还是可以直接通过用户配置或预定义的主机和帐户发送电子邮件?
-
另一种方法是使用
Dim e_mail As MailMessage和Dim attch As New Attachment(filePath & fileName)。e_mail.Attachements.Add(attch)