Dart.Mail 名前空間 > Imap クラス : SelectedMailbox プロパティ |
<BrowsableAttribute(False)> <DesignerSerializationVisibilityAttribute(DesignerSerializationVisibility.Hidden)> Public Property SelectedMailbox As Mailbox
[Browsable(false)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Hidden)] public Mailbox SelectedMailbox {get; set;}
絶対パスでメールボックスを選択する場合は Selectを使用します。
このプロパティを設定してMailboxを選択すると、ImapコンポーネントによってSELECTコマンドが送信され、Mailbox.FirstUnseen、Mailbox.Marked、Mailbox.Recent、Mailbox.Selectable、Mailbox.SublevelsAllowedが初期化されます。 これでサーバーはこのMailboxを"Selected"状態と見なし、メッセージにアクセスできるようになります。
IMAPの特質は、他のクライアントがいつでもサーバー上のメッセージを削除できる点にあります。そのため、"foreach"を使用してメールボックス内のメッセージを列挙することは推奨されません(列挙が完了する前に、非請求の応答によってメールボックスからメッセージを削除しなければならない場合があります)。その代わりに、SelectedMailbox.ToArray()に対して"foreach"を使用します。この方法で列挙している間に別のクライアントによってメッセージが削除された場合、MessageBase.Idが0に設定されます。そのため、この値をチェックすることで、メッセージを処理する前にそのメッセージが存在することを保証できます。
メッセージにアクセスするメソッドを実行すると、このプロパティは、対象のメッセージを含むMailboxに更新されます。
nullに設定すると、選択されたメールボックスが閉じ、"Authenticated"状態になります。この操作を行うと、削除対象としてマークされたすべてのメッセージが削除されます。
private void getMessages(object sender) { // サーバーとアカウントの情報を設定します。 imap1.Session.RemoteEndPoint = new Dart.Mail.IPEndPoint(myServer, Imap.GetDefaultPort(imap1.Session)); imap1.Session.Username = myUsername; imap1.Session.Password = myPassword; // 接続してアカウントにログインします。 imap1.Connect(); imap1.Authenticate(); // 取得するメッセージを含むメールボックスを開きます。 imap1.SelectedMailbox = imap1.Mailboxes["INBOX"]; // メッセージを保存するフォルダーを指定します。 string messageFolder = Application.StartupPath + "\\messages"; // アカウントのすべてのメッセージをダウンロードしてディスクに保存します。 foreach (ImapMessage imapMessage in imap1.SelectedMailbox.ToArray()) { imapMessage.Get(); imapMessage.Message.Save(messageFolder + "\\" + imapMessage.Uid + ".eml"); } // セッションから適切にログアウトします。 imap1.Close(); } private void imap1_Progress(object sender, ImapProgressEventArgs e) { // メッセージの送信状況に従ってプログレスバーを更新します。 progressBar1.Value = (e.Final) ? 0 : (int)((e.Position * 100) / e.Length); }
Private Sub getMessages(ByVal sender As Object) ' サーバーとアカウントの情報を設定します。 imap1.Session.RemoteEndPoint = New Dart.Mail.IPEndPoint(myServer, Imap.GetDefaultPort(imap1.Session)) imap1.Session.Username = myUsername imap1.Session.Password = myPassword ' 接続してアカウントにログインします。 imap1.Connect() imap1.Authenticate() ' 取得するメッセージを含むメールボックスを開きます。 imap1.SelectedMailbox = imap1.Mailboxes("INBOX") ' メッセージを保存するフォルダーを指定します。 Dim messageFolder As String = Application.StartupPath & "\messages" ' アカウントのすべてのメッセージをダウンロードしてディスクに保存します。 For Each imapMessage As ImapMessage In imap1.SelectedMailbox.ToArray() imapMessage.Get() imapMessage.Message.Save(messageFolder & "\" & imapMessage.Uid & ".eml") Next imapMessage ' セッションから適切にログアウトします。 imap1.Close() End Sub Private Sub imap1_Progress(ByVal sender As Object, ByVal e As ImapProgressEventArgs) Handles imap1.Progress ' メッセージの送信状況に従ってプログレスバーを更新します。 progressBar1.Value = If(e.Final, 0, CInt((e.Position * 100) \ e.Length)) End Sub