トップ回答者
リストボックスへのファイル添付につきまして

質問
-
Microsoft Visual Studio 2010にて、メール送信プログラムを作成しております。
Form1のボタン2をクリックし、Form2を立ち上げます。
Fomr2のリストボックスにファイルパスとファイル名(c:\ERROR.bmp)が表示され、sendボタンをクリックします。
添付確認と表示され、メール送信を行う事が出来ません。
リストボックスに表示されているだけで、実際には添付されていない状態です。
ファイルを添付してメール送信を行いたいと思っております。
添付ファイルは、不特定のファイルではなく、Cドライブの中にあるERROR.bmpというファイルです。下記構文にあります ※else~exitsubの記述がなければメール送信は出来ますが、
添付ファイルがない状態でのメール送信になります。(Form1)
Public Class Form1Private 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.TextPublic Class Form2
Inherits System.Windows.Forms.Form
Dim arlAttachments As ArrayListPrivate 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.TextIf 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 WithTry
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 TryEnd Sub
End Class
ご教授の程宜しくお願い申し上げます。
回答
-
arlAttachmentsに何も入れていないですから、arlAttachmentsは常にnothingであり、よって、常にMessageBox.Show("添付確認")が実行されてしまうということですよね? つまり、arlAttachmentsに添付ファイルがセットされれば良いのだと思います。
また、Form2.attachments.Items.Add(strpath)とありますが、Form2にはattachmentsというプロパティは定義されていないようです。よって、コンパイルが通らないはずですが、実際に動かされているようですので、上に掲載されたコードは正確ではないということはありませんか?全体的にコードの整合性が取れていないように見えますが、いかがでしょうか?
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
サンプルコードを、中身を理解しないまま、寄せ集めて作ったのでしょうか?
> 添付ファイルは、不特定のファイルではなく、Cドライブの中にあるERROR.bmp
> というファイルです。上記は間違いないのでしょうか?
アップされたコードは ListBox にある複数のファイル名を取得してメールに全て添付するようにかかれています。
添付ファイルが常に「Cドライブの中にあるERROR.bmp」だけでよければ ListBox など使う必要はなく、Form2 の中だけで処置してやればよさそうですが?
なお、MIME の Content-Type, Content-Disposition ヘッダー情報が設定されていませんが、それらもきちんと設定することをお勧めします。
すべての返信
-
arlAttachmentsに何も入れていないですから、arlAttachmentsは常にnothingであり、よって、常にMessageBox.Show("添付確認")が実行されてしまうということですよね? つまり、arlAttachmentsに添付ファイルがセットされれば良いのだと思います。
また、Form2.attachments.Items.Add(strpath)とありますが、Form2にはattachmentsというプロパティは定義されていないようです。よって、コンパイルが通らないはずですが、実際に動かされているようですので、上に掲載されたコードは正確ではないということはありませんか?全体的にコードの整合性が取れていないように見えますが、いかがでしょうか?
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/
-
サンプルコードを、中身を理解しないまま、寄せ集めて作ったのでしょうか?
> 添付ファイルは、不特定のファイルではなく、Cドライブの中にあるERROR.bmp
> というファイルです。上記は間違いないのでしょうか?
アップされたコードは ListBox にある複数のファイル名を取得してメールに全て添付するようにかかれています。
添付ファイルが常に「Cドライブの中にあるERROR.bmp」だけでよければ ListBox など使う必要はなく、Form2 の中だけで処置してやればよさそうですが?
なお、MIME の Content-Type, Content-Disposition ヘッダー情報が設定されていませんが、それらもきちんと設定することをお勧めします。