суббота, 31 октября 2009 г.

Электронная почта

В прошлом посте я рассказывал про соединения с Интернетом и работу с фалйами на сервере. А вот сегодня я научу тех, кто не умеет, работать с электронной почтой в программах HiAsm.

Компоненты для работы с электронной почтой находятся также на вкладке "Интернет". Их всего три: SMTP, POP3 и POP3_Parse. Сначала будем отправлять электронное письмо по протоколу SMTP. Конечно же, и компонент нам тоже нужен SMTP.

Ставим этот компонент и смотрим на его параметры.
Server - пишем сюда адрес сервера, с которого будет отправляться электронная почта (ведь сам компонент письмо не отправляет, он только использует для этого ваш электронный ящик, как любая почтовая программа). По умолчанию стоит smtp.mail.ru, но если ваш ящик на Яндексе, то ставьте smtp.yandex.ru.
From - отправитель письма. Сюда можно написать электронный ящик, с которого нужно отправить письмо.
To - ящик адресата.
Subject - тема, конечно!
Port - обычно можно использовать тот, что дан по умолчанию, но если не работает, то в справке своего почтового сервера можно его уточнить.
Login и Password - логин и пароль вашего ящика, с которого отправляете письмо. Их нужно указывать обязательно, чтобы почтовый сервер смог отправить ваше письмо.

Если хотите задавать эту информацию из полей программы, то используйте соответствующие точки. Кроме этих точек, у компонента есть ещё две точки данных: Body и Attach (на вкладке "Точки").

Скачать схему HiAsm

Здесь задействованы почти все точки и есть все необходимые поля в программе. Только поля для сервера нет. В программе также используется компонент Thread, чтобы отправка письма шла в отдельном потоке, параллельном программе. Если сделать отправку письма в одном потоке, то программа зависнет, пока письмо не отправится, а так можно продолжать работать с программой. Важно только выставить параметры у Thread правильно - почитайте описания к ним.

Теперь нужно реализовать чтение писем с сервера. Возьмём компонент POP3. Первые 4 параметра вам уже известны (номер порта здесь другой). Параметр Count определяет, сколько первых строк письма будет прочитано, если нужно читать не всё письмо (предпросмотр).

Скачать схему HiAsm

Сначала введите свои данные в параметры, потому что тут полей на форме я не делал. Затем нажмите кнопку, и через некоторое время увидите количество писем в поле. Можно выбрать любое число от 1 до количества писем и нажать Enter для закачки, но не спешите, ведь на onRead выдаётся не тот текст письма, который писал автор, а вся служебная информация в том числе. И для её разбора нам потребуется POP3_Parse.

Скачать схему HiAsm

Как вы видите, ему передаётся содержимое письма, а с его точек свойств можно считать уже элементы этого содержимого: тему, тело письма, прикреплённые файлы и т.д.

Отдельное замечание по прикреплённым файлам. На событие onParse выдаётся имя каждого считанного из письма файла, а само содержимое файла находится на точке Attach в виде данных типа Stream. Это файловый поток. С помощью компонента FileStream я записываю в файл этот поток, ну а имя остаётся то, которое считано из письма. Внимательно смотрите на параметры компонента FileStream!


С собственно почтой мы покончили. Но остаётся вопрос интерфейса и удобства программы-почтовика. Ведь во всех таких программах данные сохраняются и не вводятся каждый раз. Как это реализовать? Данные нужно сохранять в файле или в Реестре. Я покажу сохранение в ini-файле.

Для работы с ini-файлами есть специальный компонент на вкладке "Файлы" - Ini. Работа с ним проста. Требуется лишь указать секцию и ключ в файле, а также данные для записи, если это запись. Тип ключа рекомендуется ставить String, потому что ini-файл - это текствый файл, и информация в нём всё равно сохраняется как текст, в т.ч. и цифры.

Скачать схему HiAsm

При нажатии на кнопку выходит форма, где предлагается создать новую учётную запись. Вы вводите имя записи, данные для неё, и при нажатии "ОК" всё сохраняется в файле. Секции в нём - это имена записей, а ключи - поля, для которых вы вводили данные.

Затем при входе в программу происходит перебор всех секций в этом файле и выдача их в список. А реализовать чтение из секции файла - легче лёгкого: используйте метод doRead у компонента Ini, где секцию указывайте - выделенный компонент списка. В остальном всё так же, как и при записи.

У компонента Ini есть ещё полезные точки - рассмотрите их на вкладке "Точки".

Да, поле пароля закрыто звёздочками благодаря установленному параметру поля ввода Password=True. И у списка строк ReadOnly=True, учитывайте это.




Желаете сыграть в покер, но не знаете правил? Нет ничего проще – правила игры в покер для новичков помогут вам. Вы научитесь играть в разные разновидности покера.

Собираетесь выехать в Дубай? Туры в Дубай, отели в Дубай, шоппинг в Дубай, а также советы отдыхающим в Дубае и новости Дубая.

Или вы хотите на Майорку? Остров Майорка приглашает вас: экскурсии на Майорке, Санта-Понса, Пуерто де Алсудиа, Плайя-де-Пальма.

7 комментариев:

  1. Есть ли особенности подключения описанным Вами способом к популярным Gmail и Live? Известно, что Live конфликтует с POP3 и предпочитает MAPI.
    А Gmail предлагает резидентный xm2Rss для проверки новой почты.

    ОтветитьУдалить
  2. Для MAPI в hiasm ничего нет, но Microsoft поставляет библиотеку MSMAPI32.OCX, с которой можно работать с MAPI. В hiasm есть компонент UseActivex, на вкладке "Контролы".

    ОтветитьУдалить
  3. Как можно сделать отчёт о доставке?.. точнее как вывести его через pop и в каком виде и как когда где и через сколько сканировать ящик на наличие пришедшего уведомления тоже, но как-то ведь в outlookе маздайном реализовано это... Т.е. мб нужно что-то к письму прилеплять чтоб ответ о доставке\прочтении приходил.. или как-то так. Например SMTP-компонент неудобен тем, что он какой-то неказистый логовый фрейм выкидывает при ходе и завершении отправки, а нужно точно знать дошло\недошло, малоли связь там прервана или что. Я дописываю почтовик в программу автоматизации рабочего места, на этих местах не всегда будут работать, те кто "шарит" посадив блондинку она нажмет "отправить" и даже если ей посреди экрана вывести "BREAK CONNECT" ей будет пофиг, она возьмёт с клиента деньги, а тот в своё время будет прав взимая с меня ущерб.. В общем помогите люди добрые :)

    ОтветитьУдалить
  4. Сорри, в верхнем посте я перед "тоже" не дописал "знаю" :) Т.е. Где и как выводить я знаю, а вот что сделать, чтобы отчет на мыло прилетал дошло\прочитано - я хз =\ Очень жду помощи...

    ОтветитьУдалить
  5. Подскажите как через эту программу отправить письмо в html

    ОтветитьУдалить
  6. Из точки body отправляется простой текст из-за того, что в заголовке письма так написано. Заголовок письма формируется в коде компонента SMTP и не редактируется в HiAsm. Но вы можете зайти в код того же компонента (для этого надо его выделить и нажать Ctrl+F), найти там строку 'Content-Type: text/plain; charset="Windows-1251"' и заменить её на 'Content-Type: text/html; charset="Windows-1251"'

    ОтветитьУдалить
  7. Кстати, такая тема на форуме уже была: http://forum.hiasm.com/forum.html?q=3&p=49447

    ОтветитьУдалить