Exemple #1
0
        public void Receive(string uploadingPath)
        {
            if(string.IsNullOrEmpty(uploadingPath))
                throw new ArgumentNullException("uploadingPath");
            if(!Directory.Exists(uploadingPath))
                throw new ArgumentException("一時保存用のフォルダがありません", "uploadingPath");

            // 受信してファイルに保存後、DBにメタ情報を登録
            using(var pop3 = new Pop3())
            {
                var connected = pop3.Connect(_server, _port, _secure);
                if(!connected.Successed)
                    return;

                var loggedIn = pop3.Login(_userName, _password);
                if(!loggedIn.Successed)
                    return;

                var received = pop3.GetMessageItems();
                if(!received.Successed)
                    return;

                foreach (var item in received.Items)
                {
                    InternalReceive(uploadingPath, pop3, item);
                }

                // 削除の確定
                pop3.CommandQuit();
            }
        }
Exemple #2
0
        public void テキスト添付のみ()
        {
            Pop3.TransportFactory = () => new FakeTransport("TextOnlyAttatch");
            Response response;
            string mailBody;
            using (var pop3 = new Pop3())
            {
                response = pop3.CommandRetr(0);
                var message = response.Message.Multiparts.First().Body;
                mailBody = Mime.DecodeString(message.Encoding, message.Charset, message.BodySource);
                Console.WriteLine(mailBody);
            }

            Assert.IsTrue(response.Successed);
            Assert.IsTrue(mailBody.Contains("添付テキストのテスト"));
        }
Exemple #3
0
        public void テキストとテキスト添付()
        {
            Pop3.TransportFactory = () => new FakeTransport("TextAndTextAttatch");
            Response response;
            string mailBody;
            string text;
            using (var pop3 = new Pop3())
            {
                response = pop3.CommandRetr(0);
                var message = response.Message.FirstTextPlainMultipart();
                text = Mime.DecodeString(message.Encoding, message.Charset, message.BodySource);
                message = response.Message.Multiparts.First(m=>m.IsAttachment).Body;
                mailBody = Mime.DecodeString(message.Encoding, message.Charset, message.BodySource);
                Console.WriteLine(mailBody);
            }

            Assert.IsTrue(response.Successed);
            Assert.IsTrue(text.Contains("本文もあるよ。"));
            Assert.IsTrue(mailBody.Contains("添付テキストのテスト"));
        }
Exemple #4
0
        private void InternalReceive(string uploadingPath, Pop3 pop3, MessageItem item)
        {
            Trace.WriteLine(string.Format(" retr mail {0}  : {1}", item.No, DateTime.Now));
            var message = pop3.CommandRetr(item.No);
            var delete = true;
            if (message.Successed)
            {
                var subject = "メール投稿 " + message.Message.Header("Subject");
                var sender = message.Message.Header("From");
                var senderHash = PhotosService.GetStringHash(sender);
                var messageId = message.Message.Header("Message-ID");

                var textPart = message.Message.FirstTextPlainMultipart();
                var text = textPart != null
                    ? Mime.DecodeString(textPart.Encoding, textPart.Charset, textPart.BodySource).Trim()
                    : "";
                var description = text;

                if (_repository.GetPhoto(messageId) == null)
                {
                    var images = message.Message
                        .Multiparts
                        .Where(m => m.Body.ContentType.StartsWith("image/"));

                    Trace.WriteLine(string.Format(" save photos {0}({1})  : {2}", item.No, images.Count(), DateTime.Now));
                    foreach (var image in images)
                    {
                        var ext = ImageResizer.GetMimeToExtension(image.Body.ContentType);
                        var photo = InternalSaveMultipart(uploadingPath, image, string.Format("original.{0}", ext));
                        photo.ImportTags(Tag.ToTags(subject.Split(' ')));
                        photo.MessageId = messageId;
                        photo.Description = description;

                        // メールアドレスを削除コードにする。
                        photo.DeleteCode = senderHash;
                        photo.Sender = senderHash;

                        _repository.Append(photo);
                        _repository.SaveChanges();
                    }
                }
                else
                {
                    // 他のホストで取り出し中のはず
                    delete = false;
                }
            }

            if (delete)
                pop3.CommandDele(item.No);

            Trace.WriteLine(string.Format(" dele mail {0}  : {1}", item.No, DateTime.Now));
        }
Exemple #5
0
        public void 画像添付()
        {
            Pop3.TransportFactory = () => new FakeTransport("ImageAttatch");
            Response response;
            Message message;
            using (var pop3 = new Pop3())
            {
                response = pop3.CommandRetr(0);
                message = response.Message.Multiparts.First(m => m.IsAttachment && !m.IsTextPlain).Body;
                Console.WriteLine(message.Source);
            }

            Assert.IsTrue(message.ContentType.StartsWith("image/jpeg"));
            Assert.IsTrue(response.Successed);
        }
Exemple #6
0
 public void 全メール削除()
 {
     Response response;
     using (var pop3 = new Pop3())
     {
         pop3.Connect(_server, _port, _secure);
         pop3.Login(_userName, _password);
         response = pop3.GetMessageItems();
         // 全部消す
         foreach (var item in response.Items.Where(i => i.No > TestMailMaxNo))
         {
             pop3.CommandDele(item.No);
         }
         pop3.CommandQuit();
     }
 }
Exemple #7
0
        private Response InternalMailRequest(int mailNo)
        {
            using (var pop3 = new Pop3())
            {
                var response = pop3.Connect(_server, _port, _secure);

                Console.WriteLine(response.Trace);

                response = pop3.Login(_userName, _password);
                Console.WriteLine(response.Trace);

                response = pop3.CommandRetr(mailNo);
                Assert.IsTrue(response.Successed);

                return response;
            }
        }
Exemple #8
0
        public void ログイン()
        {
            Response response;
            using (var pop3 = new Pop3())
            {
                response = pop3.Connect(_server, _port, _secure);
                Console.WriteLine(response.Trace);

                response = pop3.Login(_userName, _password);
                Console.WriteLine(response.Trace);
            }
            Assert.IsTrue(response.Successed);
        }
Exemple #9
0
        public void メッセージ一覧を取得()
        {
            SendTestMail(_userName);

            Response response;
            using (var pop3 = new Pop3())
            {
                response = pop3.Connect(_server, _port, _secure);

                Console.WriteLine(response.Trace);

                response = pop3.Login(_userName, _password);
                Console.WriteLine(response.Trace);

                response = pop3.GetMessageItems();
                Console.WriteLine(response.Trace);
                Console.WriteLine(response.Items.Count + " messages");
            }

            Assert.IsTrue(response.Successed);
            Assert.IsTrue(response.Items.Any());
        }
Exemple #10
0
        public void メッセージを取得()
        {
            SendTestMail(_userName);

            Response response;
            using (var pop3 = new Pop3())
            {
                response = pop3.Connect(_server, _port, _secure);

                Console.WriteLine(response.Trace);

                response = pop3.Login(_userName, _password);
                Console.WriteLine(response.Trace);

                response = pop3.GetMessageItems();
                Console.WriteLine(response.Trace);

                if (response.Items.Any())
                {
                    var messageNo = response.Items.First().No;
                    response = pop3.CommandRetr(messageNo);
                    Console.WriteLine(response.Trace);
                    Console.WriteLine(response.Message.Source);
                }
            }

            Assert.IsTrue(response.Successed);
        }
Exemple #11
0
        public void メッセージを削除()
        {
            SendTestMail(_userName);

            Response response;
            using (var pop3 = new Pop3())
            {
                response = pop3.Connect(_server, _port, _secure);

                Console.WriteLine(response.Trace);

                response = pop3.Login(_userName, _password);
                Console.WriteLine(response.Trace);

                response = pop3.GetMessageItems();
                Console.WriteLine(response.Trace);
                Console.WriteLine(response.Items.Count + " messages");

                // 全部消す
                foreach (var item in response.Items.Where(i => i.No > TestMailMaxNo))
                {
                    response = pop3.CommandDele(item.No);
                    Assert.IsTrue(response.Successed);
                    Console.WriteLine(response.Trace);
                }
                response = pop3.CommandQuit();
                Console.WriteLine(response.Trace);
            }

            Assert.IsTrue(response.Successed);
        }
Exemple #12
0
 public void サーバーに接続()
 {
     Response response;
     using (var pop3 = new Pop3())
     {
         response = pop3.Connect(_server, _port, _secure);
         Console.WriteLine(response.Trace);
     }
     Assert.IsTrue(response.Successed);
 }