Exemple #1
0
        private Response CommandInternal(string command, int? no)
        {
            var index = no.HasValue ? 0 : 1;
            var result = !no.HasValue
                             ? GetResponses(command)
                             : GetResponse(command + (no.HasValue ? " " + no : ""));
            if (result.Successed)
            {
                var reader = new StringReader(result.Body);
                string line;
                while ((line = reader.ReadLine()) != null)
                {
                    var cols = line.Split(' ');
                    if (cols.Length < (3 - index)) continue;

                    var uid = new MessageItem { No = Convert.ToInt32(cols[1 - index]), Text = cols[2 - index] };
                    result.Items.Add(uid);
                }
            }

            return result;
        }
Exemple #2
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 #3
0
        public Response GetMessageItems()
        {
            var response = new Response();
            var uidl = CommandUidl();
            var list = CommandList();
            if (!uidl.Successed || !list.Successed)
                return response;

            if (uidl.Items.Count != list.Items.Count)
                return response;

            for (var i = 0; i < uidl.Items.Count; i++)
            {
                var item = new MessageItem
                                {
                                    No = uidl.Items[i].No,
                                    Text = uidl.Items[i].Text,
                                    Value = int.Parse(list.Items[i].Text)
                                };

                response.Items.Add(item);
            }
            response.Trace = "+OK";
            response.Successed = true;

            return response;
        }