humanemulator.net — справка. Продукт, демо и покупка — на хуманэмулятор.рф | Демо | Купить | API | лог изменений

Обновлено в августе 2026. · Руководство humanemulator.net

Почта по IMAP

Теги: RPA почта

Объект mail ходит на сервер сам: IMAP читать, SMTP писать, POP3 — старый ящик. Окно Outlook не нужно. Типичный RPA: письмо с накладной → сохранить PDF → разобрать в pdffile или Excel.

1Connectсервер + порт
2Findтема / from / id
3Attachсохранить файлы
4Flagпрочитано

Что выбрать

  • IMAP — серверная почта без клиента. Этот гайд.
  • SMTP — исходящие: smtp_connect, send_mail_via_smtp, проверка check_smtp_auth.
  • Outlook — локальный профиль: сценарий Outlook.
  • Exchange APImsexchange, без окна Outlook.
  • POP3 — те же идеи поиска/удаления, суффикс методов *_via_pop3 на хабе mail.

Не читайте прод-ящик с первого прогона. Заведите тестовый аккаунт и письмо с известной темой.

Подключение IMAP

imap_connect принимает сервер, порт, логин, пароль и режим SSL. Новое соединение закрывает предыдущее IMAP у объекта.

$ok = $mail->imap_connect("imap.example.com", 993, "user@example.com", "secret", 1);
if (!$ok) {
  echo "IMAP не подключился";
}

Пятый аргумент $ssl_option: 0 без SSL/TLS, 1 авто, 2 SSL или TLS обязателен, 3 TLS+STARTTLS, 4 TLS. Для большинства хостеров 993 + опция 1 или 2. Таймаут и путь лога обмена с сервером — в той же сигнатуре ($log_path с 7.0.57): включите лог, если «тихий» отказ авторизации.

Все запросы mail через прокси: set_proxy. Глубина поиска писем: set_limit (по умолчанию 5000) — большой ящик без лимита будет ходить долго.

Отключение: imap_disconnect.

Найти письмо

  1. Число: get_message_count_via_imap — sanity-check, что ящик не пустой.
  2. По теме: get_message_by_subject_via_imap
  3. По отправителю: get_message_by_from_via_imap
  4. По тексту: get_message_by_text_via_imap
  5. По номеру: get_message_by_number_via_imap
  6. По ID: get_message_by_id_via_imap
  7. По имени вложения: get_message_by_attachment_name_via_imap
$mail->set_limit(500);
$count = $mail->get_message_count_via_imap("INBOX");
$msg = $mail->get_message_by_subject_via_imap("INBOX", "Накладная");

get_message_by_subject_via_imap($folder, $subject, $exactly=false, $number=0, $timeout=300) — первым аргументом папка IMAP, не тема. Возвращает объект с полями from / subject / date / body (пусто, если письма нет). Тема должна совпадать с тем, как сервер её отдал (префиксы Re:, кодировка). Если count > 0, а by_subject пусто — ищите по from или смотрите «Спам».

Вложения

Сохранить на диск:

  • by_number
  • by_id
  • по теме / from / тексту — соседние методы на хабе IMAP

Папку для файлов задайте заранее и не пересекайте её с download браузера второй копии Studio. Дальше PDF/xlsx разбирайте отдельным шагом, не в том же «попробуем всё сразу» без лога.

$mail->save_message_attachments_by_subject_via_imap(
  "C:\\bots\\mail\\",
  "INBOX",
  "Накладная",
  false,
  0,
  120
);

Без id удобнее save_message_attachments_by_subject_via_imap($path, $folder, $subject, $exactly=false, $number=0, $timeout=300) (с 7.0.56). По id: save_message_attachments_by_id_via_imap($path, $folder, $id, $timeout=300). Методы by_id / by_flag принимают $folder первым после пути — не пропускайте INBOX.

Прочитано, перенос, удаление

Помечайте прочитанным после успешного сохранения вложения. Иначе повторный прогон «не видит» письмо, а файла на диске нет.

Сценарий: письмо → PDF на диск

$ok = $mail->imap_connect("imap.example.com", 993, "bot@example.com", "secret", 1);
if (!$ok) {
  echo "IMAP fail";
}
$mail->set_limit(200);
$count = $mail->get_message_count_via_imap("INBOX");
$msg = $mail->get_message_by_subject_via_imap("INBOX", "Накладная");
$mail->save_message_attachments_by_subject_via_imap(
  "C:\\bots\\mail\\", "INBOX", "Накладная", false, 0, 120
);
$mail->imap_disconnect();

Прочитанным помечайте после успешного save, методом с папкой и id: set_message_readed_by_id_via_imap($folder, $id, …). Если темы плавают (Re:, Fwd:) — ищите по from или по имени вложения. Разбор PDF: сценарий PDF.

Отправка SMTP

IMAP — про ящик. Исходящие — отдельное соединение.

$mail->smtp_connect("smtp.example.com", 465, "bot@example.com", "secret", 2);
$mail->send_mail_via_smtp(
  "bot@example.com",
  "ops@example.com",
  "Отчёт",
  "<p>Готово</p>",
  2,
  "",
  "",
  array("C:\\bots\\out\\report.pdf")
);
$mail->smtp_disconnect();

smtp_connect($server, $port, $login, $password, $ssl_option=1, …) — те же SSL-опции, что у IMAP. Порт часто 465 (SSL) или 587 (STARTTLS, опция 3). send_mail_via_smtp($from, $to, $subject, $message, $type, $cc="", $bcc="", $attachments=null): $type 0 — текст, 2 — HTML; несколько адресов с 7.0.56 через ;; вложения — массив путей.

Перед боевой рассылкой: check_smtp_auth и тестовый получатель. Локальный Outlook: send_mail_via_outlook или гайд Outlook.

Не склеивайте «нашёл письмо» и «отправил клиенту» в одну непроверенную сессию. Обзор: отправка данных.

FAQ

connect вернул false. Порт (993 vs 143), SSL-опция, пароль приложения вместо обычного, IMAP выключен в ящике, корпоративный файрвол. Включите $log_path.

Пустой поиск при ненулевом count. Лимит set_limit, неверная папка, тема с кодировкой. Начните с get по номеру.

Пароль в скрипте. Не коммитьте боевые ящики. На машине робота — отдельная учётка.

Яндекс / Google «заблокировали вход». Нужен пароль приложения и включённый IMAP, не пароль от веба. Корпоративный Exchange чаще проще через msexchange или Outlook, чем голый IMAP.

Вложения не появились на диске. Неверная папка IMAP (INBOX vs «Входящие»), таймаут, письмо без attach, путь без прав. Проверьте $folder и лог $log_path у connect.

Поиск методов: imap.

Все руководства · Отправка данных