2017-03-07 10 views
1

で新しい電子メール画像にスクリーンショットを添付すると、スクリーンショットを撮って新しい電子メールに添付するコードを探していました。私は自分のものを投稿します。それは99%働いて、ちょうど私の人生のためにそれが電子メールに付いていない理由を理解できません。vbネット

新しいスクリーンショットを電子メールに添付しますが、それはすべて行います。これは可能ですか?

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 protected]u") 
    theStringBuilder.Append("&subject=From Domain: " & strUserDomain & ". Computer Name: " & strCompName) 
    theStringBuilder.Append("&attach=" & Screenshot) 

    Process.Start(theStringBuilder.ToString()) 
End Sub 
+1

のmailtoプロトコルは技術的にそれをサポートしていますが、私は道ので、私の新しいメールにファイルを添付することができていたことがありませんOutlookはそれをサポートしていないと思う。いくつかの他のメールクライアントが行うかもしれませんが、私はそれがセキュリティ対策であると期待しています。アプリケーションはそれを悪意のあるようにすることができないように、添付されるファイルを選択する必要があります。 – jmcilhinney

+0

@jmcilhinneyそれは意味があります、私が調べることができる他の方法? – Moskita

+0

"仕事"は必ずしもファイルを添付する必要はありませんが、メールクライアントで作業する必要があります。クライアントが常にOutlookになることがわかっている場合は、代わりにOffice Automationを使用できます。より複雑ですが、Outlookオブジェクトモデルで許可されていることをすべて実行できます。 – jmcilhinney

答えて

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 
関連する問題