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; }
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)); }
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; }