none
リストボックスへのファイル添付につきまして RRS feed

  • 質問

  • Microsoft Visual Studio 2010にて、メール送信プログラムを作成しております。
    Form1のボタン2をクリックし、Form2を立ち上げます。
    Fomr2のリストボックスにファイルパスとファイル名(c:\ERROR.bmp)が表示され、sendボタンをクリックします。
    添付確認と表示され、メール送信を行う事が出来ません。
    リストボックスに表示されているだけで、実際には添付されていない状態です。
    ファイルを添付してメール送信を行いたいと思っております。
    添付ファイルは、不特定のファイルではなく、Cドライブの中にあるERROR.bmpというファイルです。

    下記構文にあります ※else~exitsubの記述がなければメール送信は出来ますが、
    添付ファイルがない状態でのメール送信になります。

    (Form1)
    Public Class Form1

    Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click

    Form2.Show()
    Form2.Activate()
    Dim mailMsg As New System.Net.Mail.MailMessage()
    Dim strpath As String = "C:\ERROR.bmp"
    Form2.attachments.Items.Add(strpath)
    Dim attach1 As New System.Net.Mail.Attachment("C:\ERROR.bmp")
    mailMsg.Attachments.Add(attach1)

    End Sub

    End Class

    (Form2)
    Imports System.Net.Mail
    Imports System.Text

    Public Class Form2

    Inherits System.Windows.Forms.Form
    Dim arlAttachments As ArrayList

    Private Sub Send_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Send.Click

    Dim mailMsg As New MailMessage(New MailAddress(from.Text.Trim, TextBox4.Text), New MailAddress(ToAddress.Text.Trim))
    With mailMsg

    .Subject = textbox2.Text
    .Body = textbox3.Text
    Dim subject As String = textbox2.Text
    Dim body As String = textbox3.Text

    If Not IsNothing(arlAttachments) Then
    Dim mailAttachment As Attachment
    For Each mailAttachment In arlAttachments
    .Attachments.Add(mailAttachment)
    Next
    Else※
    MessageBox.Show("添付確認")※
    Exit Sub※
    End If
    End With

    Try
    Dim Client As New System.Net.Mail.SmtpClient()
    Client.Host = "server名"
    Client.Port = ポート番号
    Client.DeliveryMethod = System.Net.Mail.SmtpDeliveryMethod.Network
    Client.Credentials = New System.Net.NetworkCredential("ユーザ名", "パスワード")
    Client.Send(mailMsg)
    attachments.Items.Clear()
    attachments.Items.Add("(No Attachments)")
    MessageBox.Show("メール送信OK!")
    Catch exp As Exception
    MessageBox.Show("エラー発生!")
    End Try

    End Sub

    End Class

    ご教授の程宜しくお願い申し上げます。

     

    2013年10月15日 22:55

回答

  • arlAttachmentsに何も入れていないですから、arlAttachmentsは常にnothingであり、よって、常にMessageBox.Show("添付確認")が実行されてしまうということですよね? つまり、arlAttachmentsに添付ファイルがセットされれば良いのだと思います。

    また、Form2.attachments.Items.Add(strpath)とありますが、Form2にはattachmentsというプロパティは定義されていないようです。よって、コンパイルが通らないはずですが、実際に動かされているようですので、上に掲載されたコードは正確ではないということはありませんか?全体的にコードの整合性が取れていないように見えますが、いかがでしょうか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 星 睦美 2013年10月18日 7:41
    • 回答としてマーク 星 睦美 2013年10月23日 1:54
    2013年10月16日 1:02
    モデレータ
  • サンプルコードを、中身を理解しないまま、寄せ集めて作ったのでしょうか?

    > 添付ファイルは、不特定のファイルではなく、Cドライブの中にあるERROR.bmp
    > というファイルです。

    上記は間違いないのでしょうか?

    アップされたコードは ListBox にある複数のファイル名を取得してメールに全て添付するようにかかれています。

    添付ファイルが常に「Cドライブの中にあるERROR.bmp」だけでよければ ListBox など使う必要はなく、Form2 の中だけで処置してやればよさそうですが?

    なお、MIME の Content-Type, Content-Disposition  ヘッダー情報が設定されていませんが、それらもきちんと設定することをお勧めします。

    • 回答の候補に設定 星 睦美 2013年10月18日 7:41
    • 回答としてマーク 星 睦美 2013年10月23日 1:54
    2013年10月16日 4:01

すべての返信

  • arlAttachmentsに何も入れていないですから、arlAttachmentsは常にnothingであり、よって、常にMessageBox.Show("添付確認")が実行されてしまうということですよね? つまり、arlAttachmentsに添付ファイルがセットされれば良いのだと思います。

    また、Form2.attachments.Items.Add(strpath)とありますが、Form2にはattachmentsというプロパティは定義されていないようです。よって、コンパイルが通らないはずですが、実際に動かされているようですので、上に掲載されたコードは正確ではないということはありませんか?全体的にコードの整合性が取れていないように見えますが、いかがでしょうか?


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答の候補に設定 星 睦美 2013年10月18日 7:41
    • 回答としてマーク 星 睦美 2013年10月23日 1:54
    2013年10月16日 1:02
    モデレータ
  • サンプルコードを、中身を理解しないまま、寄せ集めて作ったのでしょうか?

    > 添付ファイルは、不特定のファイルではなく、Cドライブの中にあるERROR.bmp
    > というファイルです。

    上記は間違いないのでしょうか?

    アップされたコードは ListBox にある複数のファイル名を取得してメールに全て添付するようにかかれています。

    添付ファイルが常に「Cドライブの中にあるERROR.bmp」だけでよければ ListBox など使う必要はなく、Form2 の中だけで処置してやればよさそうですが?

    なお、MIME の Content-Type, Content-Disposition  ヘッダー情報が設定されていませんが、それらもきちんと設定することをお勧めします。

    • 回答の候補に設定 星 睦美 2013年10月18日 7:41
    • 回答としてマーク 星 睦美 2013年10月23日 1:54
    2013年10月16日 4:01
  • YTB さん、こんにちは
    フォーラム オペレーターの星 睦美です。

    アドバイスとして参考になるのではと思いますので、今回は私からtrapemiya さんとSurferOnWww さんの返信に[回答としてマーク] させていただきました。もしさらに回答に関して質問がありましたら、遠慮なく[回答としてのマークの解除] をして返信できます。

    それでは、今後ともMSDN フォーラムをお役立てください。


    フォーラム オペレーター 星 睦美 - MSDN Community Support

    2013年10月23日 1:54