使用vb net

时间:2017-03-07 06:02:56

标签: vb.net email outlook

一直在寻找一些代码来截取屏幕截图并将屏幕截图附加到新电子邮件中。我会发布我的内容。它工作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

1 个答案:

答案 0 :(得分:0)

替代通过已安装的邮件客户端发送...

' Some of these may come from the form or user settings or wherever
Private Const MailSenderEmail As String = ""
Private Const MailSenderName As String = ""
Private Const MailRecipient As String = ""
Private Const MailSubject As String = ""
Private Const MailBody As String = ""
Private Const MailHost As String = ""
Private Const MailPort As String = ""
Private Const MailUser As String = ""
Private Const MailPass As String = ""
Private Const MailEnableSsl As Boolean = False

Private Sub testStripMenuItem_Click(sender As Object, e As EventArgs) Handles testStripMenuItem.Click
    '
    ' Your code to capture the screen
    '

    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)

    ' Send the email with Screenshot attached
    Using MailMessage As New Net.Mail.MailMessage
        With MailMessage
            .From = New Net.Mail.MailAddress(MailSenderEmail, MailSenderName)
            .To.Add(MailRecipient)
            .Subject = MailSubject
            .Body = MailBody
            .Attachments.Add(New Net.Mail.Attachment(Screenshot))
        End With

        With New Net.Mail.SmtpClient
            .Host = MailHost
            .Port = MailPort
            .EnableSsl = MailEnableSsl

            Select Case True
                Case String.IsNullOrWhiteSpace(MailUser)
                Case String.IsNullOrWhiteSpace(MailPass)
                Case Else
                    .Credentials = New Net.NetworkCredential(MailUser, MailPass)
            End Select

            .Send(MailMessage)
        End With
    End Using
End Sub