Esempio n. 1
0
Variant f_imap_open(const String& mailbox, const String& username,
                    const String& password,
                    int64_t options /* = 0 */, int64_t retries /* = 0 */) {
  String filename = mailbox;
  if (filename[0] != '{') {
    filename = File::TranslatePath(filename);
    if (filename.empty()) {
      return false;
    }
  }

  if (retries < 0) {
    Logger::Warning("Retries must be greater or equal to 0");
  } else {
    mail_parameters(NIL, SET_MAXLOGINTRIALS, (void *) retries);
  }

  IMAPG(user)     = std::string(username.data(), username.size());
  IMAPG(password) = std::string(password.data(), password.size());

  MAILSTREAM *stream = mail_open(NIL, (char*)filename.data(), options);
  if (stream == NIL) {
    Logger::Warning("Couldn't open stream %s", filename.data());
    IMAPG(user).clear();
    IMAPG(password).clear();
    return false;
  }

  return NEWOBJ(ImapStream)(stream, (options & PHP_EXPUNGE) ? CL_EXPUNGE : NIL);
}
Esempio n. 2
0
void mm_login(NETMBX *mb, char *user, char *pwd, long trial) {
  if (*mb->user) {
    string_copy(user, mb->user, MAILTMPLEN);
  } else {
    string_copy(user, IMAPG(user).c_str(), MAILTMPLEN);
  }
  string_copy(pwd, IMAPG(password).c_str(), MAILTMPLEN);
}
Esempio n. 3
0
void ImapStream::close() {
  if (m_stream) {
    mail_close_full(m_stream, m_flag);
    IMAPG(user).clear();
    IMAPG(password).clear();
    m_stream = NULL;
  }
}
Esempio n. 4
0
Variant f_imap_last_error() {
  if (IMAPG(errorstack) == NIL) {
    return false;
  }
  for (ERRORLIST *cur = IMAPG(errorstack); cur != NIL;
       cur = cur->next) {
    if (cur->next == NIL) {
      return String((const char *)cur->text.data, CopyString);
    }
  }
  return uninit_null();
}
Esempio n. 5
0
Variant f_imap_errors() {
  if (IMAPG(errorstack) == NIL) {
    return false;
  }

  Array ret(Array::Create());

  for (ERRORLIST *cur = IMAPG(errorstack); cur != NIL;
       cur = cur->next) {
      ret.append(String((const char *)cur->text.data, CopyString));
  }
  IMAPG(errorstack) = NIL;
  return ret;
}
Esempio n. 6
0
static Variant HHVM_FUNCTION(imap_alerts) {
  if (IMAPG(alertstack) == NIL) {
    return false;
  }

  Array ret(Array::Create());

  for (STRINGLIST *cur = IMAPG(alertstack); cur != NIL;
       cur = cur->next) {
      ret.append(String((const char *)cur->text.data, CopyString));
  }
  mail_free_stringlist(&IMAPG(alertstack));
  IMAPG(alertstack) = NIL;
  return ret;
}
Esempio n. 7
0
void mm_log(char *str, long errflg) {
  ERRORLIST *cur = NIL;

  /* Author: CJH */
  if (errflg != NIL) { /* CJH: maybe put these into a more comprehensive
                          log for debugging purposes? */
    if (IMAPG(errorstack) == NIL) {
      IMAPG(errorstack) = mail_newerrorlist();
      IMAPG(errorstack)->text.size =
        mm_strlen(IMAPG(errorstack)->text.data = mm_cpystr(str));
      IMAPG(errorstack)->errflg = errflg;
      IMAPG(errorstack)->next = NIL;
    } else {
      cur = IMAPG(errorstack);
      while (cur->next != NIL) {
        cur = cur->next;
      }
      cur->next = mail_newerrorlist();
      cur = cur->next;
      cur->text.size = mm_strlen(cur->text.data = mm_cpystr(str));
      cur->errflg = errflg;
      cur->next = NIL;
    }
  }
}
Esempio n. 8
0
Variant f_imap_search(const Resource& imap_stream, const String& criteria,
                      int64_t options /* = 0 */,
                      const String& charset /* = "" */) {
  ImapStream *obj = imap_stream.getTyped<ImapStream>();

  char *search_criteria = (char*)criteria.data();
  IMAPG(messages) = IMAPG(messages_tail) = NIL;

  SEARCHPGM *pgm = mail_criteria(search_criteria);

  mail_search_full(obj->m_stream,
                   (charset.empty() ? NIL : (char*)charset.data()),
                   pgm,
                   options);

  if (pgm && !(options & SE_FREE)) {
    mail_free_searchpgm(&pgm);
  }

  if (IMAPG(messages) == NIL) {
    return false;
  }

  Array ret(Array::Create());

  MESSAGELIST *cur = IMAPG(messages);
  while (cur != NIL) {
    ret.append((int64_t)cur->msgid);
    cur = cur->next;
  }
  mail_free_messagelist(&IMAPG(messages), &IMAPG(messages_tail));
  return ret;
}
Esempio n. 9
0
void mm_searched(MAILSTREAM *stream, unsigned long number) {
  MESSAGELIST *cur = NIL;
  if (IMAPG(messages) == NIL) {
    IMAPG(messages) = mail_newmessagelist();
    IMAPG(messages)->msgid = number;
    IMAPG(messages)->next = NIL;
    IMAPG(messages_tail) = IMAPG(messages);
  } else {
    cur = IMAPG(messages_tail);
    cur->next = mail_newmessagelist();
    cur = cur->next;
    cur->msgid = number;
    cur->next = NIL;
    IMAPG(messages_tail) = cur;
  }
}
Esempio n. 10
0
Variant f_imap_list(const Resource& imap_stream, const String& ref,
                    const String& pattern) {
  ImapStream *obj = imap_stream.getTyped<ImapStream>();

  /* set flag for normal, old mailbox list */
  IMAPG(folderlist_style) = FLIST_ARRAY;

  IMAPG(folders) = IMAPG(folders_tail) = NIL;
  mail_list(obj->m_stream, (char*)ref.data(), (char*)pattern.data());
  if (IMAPG(folders) == NIL) {
    return false;
  }

  Array ret(Array::Create());
  for (STRINGLIST *cur = IMAPG(folders); cur != NIL; cur = cur->next) {
    ret.append(String((const char *)cur->text.data, CopyString));
  }
  mail_free_stringlist(&IMAPG(folders));
  IMAPG(folders) = IMAPG(folders_tail) = NIL;
  return ret;
}
Esempio n. 11
0
/* Author: CJH */
void mm_notify(MAILSTREAM *stream, char *str, long errflg) {
  STRINGLIST *cur = NIL;
  if (strncmp(str, "[ALERT] ", 8) == 0) {
    if (IMAPG(alertstack) == NIL) {
      IMAPG(alertstack) = mail_newstringlist();
      IMAPG(alertstack)->text.size =
        mm_strlen((IMAPG(alertstack)->text.data = mm_cpystr(str)));
      IMAPG(alertstack)->next = NIL;
    } else {
      cur = IMAPG(alertstack);
      while (cur->next != NIL) {
        cur = cur->next;
      }
      cur->next = mail_newstringlist ();
      cur = cur->next;
      cur->text.size = mm_strlen(cur->text.data = mm_cpystr(str));
      cur->next = NIL;
    }
  }
}
Esempio n. 12
0
void mm_status(MAILSTREAM *stream, char *mailbox, MAILSTATUS *status) {
  IMAPG(status_flags)=status->flags;
  if (IMAPG(status_flags) & SA_MESSAGES) {
    IMAPG(status_messages)=status->messages;
  }
  if (IMAPG(status_flags) & SA_RECENT) {
    IMAPG(status_recent)=status->recent;
  }
  if (IMAPG(status_flags) & SA_UNSEEN) {
    IMAPG(status_unseen)=status->unseen;
  }
  if (IMAPG(status_flags) & SA_UIDNEXT) {
    IMAPG(status_uidnext)=status->uidnext;
  }
  if (IMAPG(status_flags) & SA_UIDVALIDITY) {
    IMAPG(status_uidvalidity)=status->uidvalidity;
  }
}
Esempio n. 13
0
void mm_lsub(MAILSTREAM *stream, int delimiter, char *mailbox,
             long attributes) {
  STRINGLIST *cur=NIL;
  FOBJECTLIST *ocur=NIL;

  if (IMAPG(folderlist_style) == FLIST_OBJECT) {
    /* build the array of objects */
    /* Author: CJH */
    if (IMAPG(sfolder_objects) == NIL) {
      IMAPG(sfolder_objects) = mail_newfolderobjectlist();
      IMAPG(sfolder_objects)->text.size =
        mm_strlen(IMAPG(sfolder_objects)->text.data=mm_cpystr(mailbox));
      IMAPG(sfolder_objects)->delimiter = delimiter;
      IMAPG(sfolder_objects)->attributes = attributes;
      IMAPG(sfolder_objects)->next = NIL;
      IMAPG(sfolder_objects_tail) = IMAPG(sfolder_objects);
    } else {
      ocur=IMAPG(sfolder_objects_tail);
      ocur->next=mail_newfolderobjectlist();
      ocur=ocur->next;
      ocur->text.size=mm_strlen(ocur->text.data = mm_cpystr(mailbox));
      ocur->delimiter = delimiter;
      ocur->attributes = attributes;
      ocur->next = NIL;
      IMAPG(sfolder_objects_tail) = ocur;
    }
  } else {
    /* build the old simple array for imap_listsubscribed() */
    if (IMAPG(sfolders) == NIL) {
      IMAPG(sfolders)=mail_newstringlist();
      IMAPG(sfolders)->text.size =
        mm_strlen(IMAPG(sfolders)->text.data=mm_cpystr(mailbox));
      IMAPG(sfolders)->next=NIL;
      IMAPG(sfolders_tail) = IMAPG(sfolders);
    } else {
      cur=IMAPG(sfolders_tail);
      cur->next=mail_newstringlist ();
      cur=cur->next;
      cur->text.size = mm_strlen (cur->text.data = mm_cpystr (mailbox));
      cur->next = NIL;
      IMAPG(sfolders_tail) = cur;
    }
  }
}
Esempio n. 14
0
void mm_list(MAILSTREAM *stream, int delimiter, char *mailbox,
             long attributes) {
  STRINGLIST *cur=NIL;
  FOBJECTLIST *ocur=NIL;

  if (IMAPG(folderlist_style) == FLIST_OBJECT) {
    /* build up a the new array of objects */
    /* Author: CJH */
    if (IMAPG(folder_objects) == NIL) {
      IMAPG(folder_objects) = mail_newfolderobjectlist();
      IMAPG(folder_objects)->text.size =
        mm_strlen(IMAPG(folder_objects)->text.data=mm_cpystr(mailbox));
      IMAPG(folder_objects)->delimiter = delimiter;
      IMAPG(folder_objects)->attributes = attributes;
      IMAPG(folder_objects)->next = NIL;
      IMAPG(folder_objects_tail) = IMAPG(folder_objects);
    } else {
      ocur=IMAPG(folder_objects_tail);
      ocur->next=mail_newfolderobjectlist();
      ocur=ocur->next;
      ocur->text.size = mm_strlen(ocur->text.data = mm_cpystr(mailbox));
      ocur->delimiter = delimiter;
      ocur->attributes = attributes;
      ocur->next = NIL;
      IMAPG(folder_objects_tail) = ocur;
    }

  } else {
    /* build the old IMAPG(folders) variable to allow old
       imap_listmailbox() to work */
    if (!(attributes & LATT_NOSELECT)) {
      if (IMAPG(folders) == NIL) {
        IMAPG(folders)=mail_newstringlist();
        IMAPG(folders)->text.size =
          mm_strlen(IMAPG(folders)->text.data=mm_cpystr(mailbox));
        IMAPG(folders)->next=NIL;
        IMAPG(folders_tail) = IMAPG(folders);
      } else {
        cur=IMAPG(folders_tail);
        cur->next=mail_newstringlist ();
        cur=cur->next;
        cur->text.size = mm_strlen (cur->text.data = mm_cpystr (mailbox));
        cur->next = NIL;
        IMAPG(folders_tail) = cur;
      }
    }
  }
}
Esempio n. 15
0
Variant f_imap_status(const Resource& imap_stream, const String& mailbox,
                      int64_t options /* = 0 */) {
  ImapStream *obj = imap_stream.getTyped<ImapStream>();
  Object ret(SystemLib::AllocStdClassObject());

  if (mail_status(obj->m_stream, (char *)mailbox.data(), options)) {
    ret.o_set("flags", (int64_t)IMAPG(status_flags));

    if (IMAPG(status_flags) & SA_MESSAGES) {
      ret.o_set("messages", (int64_t)IMAPG(status_messages));
    }
    if (IMAPG(status_flags) & SA_RECENT) {
      ret.o_set("recent", (int64_t)IMAPG(status_recent));
    }
    if (IMAPG(status_flags) & SA_UNSEEN) {
      ret.o_set("unseen", (int64_t)IMAPG(status_unseen));
    }
    if (IMAPG(status_flags) & SA_UIDNEXT) {
      ret.o_set("uidnext", (int64_t)IMAPG(status_uidnext));
    }
    if (IMAPG(status_flags) & SA_UIDVALIDITY) {
      ret.o_set("uidvalidity", (int64_t)IMAPG(status_uidvalidity));
    }
  } else {
    return false;
  }
  return ret;
}