• ベストアンサー

メールを変数の中に入れたいのですが・・・(汗

はじめまして。初歩的な質問で申し訳ないのですが、現在下記URLのDLLに同梱されているサンプルプログラムをいじりながら勉強しておりまして、実行すると同時にPOPへ接続し、最新のメール本文のみを取得して変数に入れる・・という物を作りたいのですが、やり方が全く分からずに四苦八苦しております。 どなたかお助け願えませんでしょうか。 ※業務などで使用する訳ではありません、個人的な勉強用です。 http://hp.vector.co.jp/authors/VA029929/soft/tkmpdll.html よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

ほとんど添付されているサンプルと同じですが、コンソールで動いて、現在あるメールを全部読むものをつくってみました。 コンソールプログラムだとイベント駆動ではないので、ちょっとはわかりやすいかもしれません。 サーバーとのやりとりは、Log.txtに書き込むようにしてあります。 Imports System.Collections Imports System.IO Module Module1 Public Log As StreamWriter Sub Main() Dim PopClient As TKMP.Net.PopClient Dim UserName As String = "BLUEPIXY", Password As String = "PASSWORD", ServerAddress As String = "pop.mail.server" Dim bp As New TKMP.Net.BasicPopLogon(UserName, Password) Dim Address As System.Net.IPAddress = System.Net.Dns.Resolve(ServerAddress).AddressList(0) Dim Port As Integer = 110 Log = New StreamWriter(File.Open("Log.txt", FileMode.Create, FileAccess.Write)) PopClient = New TKMP.Net.PopClient(bp, Address, Port) AddHandler PopClient.MessageReceive, AddressOf PopClient_MessageReceive AddHandler PopClient.MessageSend, AddressOf PopClient_MessageSend If Not PopClient.Connect() Then Console.WriteLine("接続失敗") PopClient.Close() PopClient = Nothing Exit Sub Else Console.WriteLine("接続成功") End If Dim Mails As TKMP.Net.MailData() = PopClient.MailDatas Dim MailList As New ArrayList Dim i As Integer For i = 0 To Mails.Length - 1 Log.WriteLine("受信数 " + (i + 1).ToString() + " / " + Mails.Length.ToString()) Dim Data As TKMP.Net.MailData = CType(Mails(i), TKMP.Net.MailData) MailList.Add(Data) Next i PopClient.KeepAlive = True Dim x As TKMP.Net.MailData For Each x In MailList Call MailDataReadHeader(x) Call MailDataReadBody(x) Next PopClient.Close() PopClient = Nothing Log.Close() End Sub Private Sub MailDataReadHeader(ByVal MailData As TKMP.Net.MailData) If Not MailData.ReadHeader() Then Return End If Dim re As New TKMP.Reader.MailReader(MailData.HeaderStream, False) Dim dateTime As String = New TKMP.Reader.Header.DateTime(re).Value.ToString("yyyy/MM/dd HH:mm") Dim From As String = re.HeaderCollection("From") Dim Subject As String = re.HeaderCollection("Subject") Console.WriteLine("Subject:{0}", Subject) Console.WriteLine("From:{0}", From) Console.WriteLine("at:{0}" & ControlChars.CrLf, dateTime) End Sub Private Sub MailDataReadBody(ByVal MailData As TKMP.Net.MailData) If MailData.DataStream Is Nothing Then AddHandler MailData.BodyDataReceive, AddressOf MailData_DataReceive Dim GetFlag As Boolean = MailData.ReadBody() RemoveHandler MailData.BodyDataReceive, AddressOf MailData_DataReceive If Not GetFlag Then Return End If End If Dim re As New TKMP.Reader.MailReader(MailData.DataStream, False) Dim s As String = String.Empty If re.FileCount <> 0 Then s += "-------------------------添付ファイル---------------------" + ControlChars.CrLf For Each f As TKMP.Reader.File In re.FileCollection s += f.FileName + " (" + f.FileSize.ToString() + "byte)" + ControlChars.CrLf Next s += "----------------------------------------------------------" + ControlChars.CrLf End If Console.WriteLine(s + re.MainText) End Sub Private Sub MailData_DataReceive(ByVal sender As Object, ByVal e As TKMP.Net.DataReceiveArgs) Dim Data As TKMP.Net.MailData = CType(sender, TKMP.Net.MailData) Log.WriteLine("受信中 " + e.ReadLength.ToString() + " / " + Data.Length.ToString()) End Sub Private Sub PopClient_MessageReceive(ByVal sender As Object, ByVal e As TKMP.Net.MessageArgs) Dim trimChar() As Char = {ChrW(0)} Log.WriteLine(e.Message.Trim(trimChar)) End Sub Private Sub PopClient_MessageSend(ByVal sender As Object, ByVal e As TKMP.Net.MessageArgs) Dim trimChar() As Char = {ChrW(0)} Log.WriteLine(e.Message.Trim(trimChar)) End Sub End Module

Hasky
質問者

お礼

親切に教えて頂きまして本当に有難うございます!!!!本当に本当に感謝です。ListViewの所でつまづいていたので、コンソールアプリだと分かりやすかったです!本当に有難うございました。

関連するQ&A