dポイントプレゼントキャンペーン実施中!

はじめまして。初歩的な質問で申し訳ないのですが、現在下記URLのDLLに同梱されているサンプルプログラムをいじりながら勉強しておりまして、実行すると同時にPOPへ接続し、最新のメール本文のみを取得して変数に入れる・・という物を作りたいのですが、やり方が全く分からずに四苦八苦しております。

どなたかお助け願えませんでしょうか。
※業務などで使用する訳ではありません、個人的な勉強用です。

http://hp.vector.co.jp/authors/VA029929/soft/tkm …

よろしくお願いいたします。

A 回答 (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
    • good
    • 0
この回答へのお礼

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

お礼日時:2005/01/17 16:43

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!