Обробка пошти за допомогою Delphi, Різне, Програмування, статті

Часто буває необхідно обробити поштові повідомлення від користувачів. Наприклад, занести замовника товару в базу даних або висловлювання клієнтів про вашу фірму (своєрідна книга скарг і пропозицій). Це можна зробити вручну, читати кожне повідомлення, копіювати, перезаписувати, … Але якщо до вас щодня звертаються сотні або навіть тисячі клієнтів? Потрібно буде найняти нового співробітника або самостійно переглядати всю пошту. Звичайно, можна написати скрипт на Perl “е, який буде обробляти дані, введені користувачем через форму на вашому сайті. Проте якщо у вас немає власної сторінки або ви не хочете зберігати конфіденційну інформацію в базі даних на сервері – потрібно додаток під Windows, яке буде знаходитися на локальному комп’ютері і заходячи в Інтернет обробляти пошту. Після цього ви можете робити з вмістом листа що завгодно: зберегти його, переслати на інший поштовий ящик, занести в базу, … Також можна створити поштовий фільтр, який буде групувати листи по темах. Так можна позбутися непотрібного спаму. Наприклад, якщо ви на поштову скриньку повинні отримувати тільки резюме від шукачів роботи, можна видаляти всі листи, тема яких відмінна від “резюме” чи “робота”. Мені доводилося розробляти програму, яка отримує дані на e-mail, заповнені користувачем через форму на сервері. Після цього вона аналізує ці дані і заносить їх у базу на локальному комп’ютері. Аналіз відбувається по заголовку та імені поля форми. Якщо заголовок листа співпадає з заголовком, записаному в настроік програми, то після цього здійснюється розбір письма. Лист після заповнення форми мало наступну структуру:
ім’я поля1 форми = значення1
ім’я поля2 форми = значення2
……………………………….
ім’я поляN форми = значеніеN

Додаток обробляло значення полів і записували їх в базу даних ACCESS, де поля мали ті ж імена, що й у форми. Таким чином дані зберігалися на комп’ютері в офісі і були приховані від Інтернет – хакерів.

Таке додаток можна написати практично на будь-якому, наявними у вас мовою. Я пропоную вам розглянути такий додаток на Delphi і обговорити принципи роботи програми. Для роботи з протоколами Internet в Delphi на палітрі компонентів призначений розділ FastNet. FastNet



Для прийому пошти нам знадобиться протокол POP3 (Post Office Protocol – Version3) для цього протоколу зарезервований 110 порт, відповідний йому компонент в розділі FastNet – NMPOP3.
За допомогою NMPOP3 можна: з’єднатися з сервером, послати аунтіфікаціонную інформацію на сервер, отримати інформацію про поштовій скриньці (кількість листів, розмір), отримати листи з сервера, видалити листи.

Принцип спілкування з сервером по протоколу POP3 складається з трьох етапів: встановлення з’єднання (аунтіфікація), читання списку листів і вибір потрібного листа, припинення з’єднання. Роботу з сервером по протоколу необхідно знати, тому що він надає широкі можливості не тільки для програмістів, але й для користувачів. Мені багато разів приходили листи неймовірного розміру, з великою кількістю картинок. Після десяти хвилин роботи Outlook Express просто зависав. Доводилося видаляти пошту, ведучи діалог з сервером по POP3, приєднавшись до нього через telnet до 110 порту.
Розглянемо діалог з сервером по протоколу POP3.
Після підключення до поштового сервера, видається рядок привітання + OK POP3 server ready. Після цього користувач посилає свій логін, командою USER login і пароль PASS password. Якщо логін і пароль введені правильно, можна почати переглядати пошту.
Командою LIST, можна подивитися скільки листів до вас прийшло і розмір листів. Відповідь Сервера виглядає наступним чином:
User: LIST
Server: +OK 2 messages (400 octets)
Server: 1 250
Server: 2 150
Дане повідомлення свідчить про те, що на сервері знаходиться два повідомлення обсягом в 400 байт, перше повідомлення обсягом 250 байт, друге -150 байт. Якщо необхідно подивитися розмір конкретного листа, наприклад п’ята необхідно послати серверу команду LIST 5. В результаті на терміналі з’явиться повідомлення Server: + OK 2200. У тому випадку, якщо лист з таким номером не існує висвітиться помилка
Server: -ERR no such message, only 2 messages in maildrop.
Ця помилка говорить про те, що на сервері знаходиться тільки два листи. Щоб отримати листа з сервера використовують команду RETR m, де m – номер листа. Якщо лист занадто довге, можна прочитати його не повністю, а тільки перші n – рядків цього листа, це робиться командою TOP msg n. Для видалення листа служить команда DEL m. Якщо лист віддалилося, з’явиться повідомлення + OK message 1 deleted, якщо не існує листи з таким номерів сервер видасть помилку-ERR no such message. Закінчити обробку пошти і вийти з діалогу можна командою QUIT. Детальніше протокол описаний в документі RFC1081 та RFC 1460.
Для нашого прикладу вам знадобитися поштову скриньку, отримати його в Інтернеті не складе особливої ​​складності. Візьмемо, наприклад, безкоштовний поштовий ящик на сервері www.rambler.ru. Сервер вихідний пошти на Рамблере mail.rambler.ru (ви легко його можете дізнатися у адміністратора сервера або на самому сервері), він нам знадобиться для з’єднання по протоколу POP3. Отже, почнемо.

Створимо новий додаток. Додамо в нього компонент NMPOP3. За замовчуванням він отримає в нашому додаток ім’я NMPOP31, в цьому можна переконатися, переглянувши Object Inspector. Це ім’я ми будемо використовувати в нашому прикладі. Ви можете його перейменувати для зручності поводження з ним, наприклад назвати його POCHTA. Для з’єднання з сервером, нам треба викликати процедуру Connect компонента NMPOP3. Але перед цим ми встановимо ім’я сервера, логін і пароль користувача для аунтіфікаціі по протоколу POP3. Сервер задається властивістю NMPOP31.Host, логін властивістю NMPOP31.UserID, пароль властивістю NMPOP31.Password. Ім’я користувача і пароль видається адміністратором сервера після реєстрації. У локальній мережі, звичайно, вся пошта приходить на сервер і тільки після звернення до нього перенаправляється на робочі місця. Тому тут треба задавати ім’я сервера (proxy – сервера), який забирає пошту і ваш обліковий запис (логін і пароль).



Після цього можна викликати метод NMPOP31.Connect. Ми можемо подивитися кількість листів на сервері, звернувшись до властивості NMPOP31.MailCount. Отримаємо яке – небудь лист із сервера, наприклад під номером 1. Для цього викличемо процедуру NMPOP31.GetMailMessage (1). Після цього об’єкт TmailMessage містить інформацію про лист. Тепер ми можемо проаналізувати наш лист: подивитися тему листа (NMPOP31.MailMessage.Subject) , Поштова адреса відправника (NMPOP31.MailMessage.From), прочитати лист (NMPOP31.MailMessage.Body). Також нам доступні деякі інші властивості повідомлення. За допомогою властивості NMPOP31.MailMessage.MessageId, яке має тип string проглядається ідентифікатор письма. Список файлів вкладення доступний через властивість NMPOP31.MailMessage.Attachment, це властивості типу TStringList. Після прочитання листа треба роз’єднатися з сервером, це робиться процедурою NMPOP31.Disconnect. Давайте подивимося, як це все виглядає на нашому прикладі. Додамо на форму компоненти TEdit, TMemo і TButton. Вони отримають імена, соответсвенно Edit1, Memo1, Button1. Після натискання кнопки “Отримати лист” в поле Edit1 з’явиться тема першого листа, якщо на сервері є листи, а вполе Memo1 – тіло листа.



Для цього нам треба запрограмувати кнопку Button1 за наступним алгоритмом:

procedure TForm1.Button1Click(Sender: TObject);
begin
NMPOP31.Connect;
NMPOP31.GetMailMessage(1);
Edit1.Text:=NMPOP31.MailMessage.Subject;
Memo1.Lines:=NMPOP31.MailMessage.Body;
NMPOP31.Disconnect;
end;

Після прочитання листа, може виникнути необхідність очистити ящик від нього, щоб було більше місць для последущим послань. Це легко зробити, використовуючи процедуру DeleteMailMessage (Number: intger), де Number – це номер листа. Процедура позначає лист, як не потрібна і після роз’єднання з сервером воно віддаляється. Будьте обережнішими з цією функцією, після видалення листа, ви його більше не встановити. Для зняття позначки, якщо ви раптом передумали видаляти писма, служить метод NMPOP31.Reset. Програму можна модернізувати, створити так званого “робота”. Встановити на форму компонент Taimer, виставити час спрацьовування через кожні n хвилин і пов’язати його з подією натискання на кнопку. І наша програма, працюючи у фоновому режимі, самостійно буде кожні n минути перевіряти пошту, реєструвати всі зміни.
Ось ми і написали програмку для обробки пошти. Як ви бачите, за допомогою Delphi це легко і просто. У розділі FastNet знаходяться ще багато компонентів для роботи з протоколами Інтернет. Для відправки пошти можна використовувати компонент NMSMTP, він працює з протоколом SMTP, який детально розписаний в документі RFC 821. За допомогою компонента NMSMTP можна организавать свою поштову розсилку за кількома адресами, так звану спам – рекламу. Також можна организавать redirect пошти (перенаправлення на інший поштовий ящик).
Діалог користувача з сервером по протоколу SMTP також простий, як і по POP3. Після з’єднання з сервером до 25 TCP порту, клієнт посилає команду HELO свое_імя. Після чого сервер видає рядок з кодом 250, яка говорить про готовність сервера для роботи з вами. Далі ми повинні послати команду mail from:, Де email – це ваш зворотний e-mail адресу. На що сервер знову відповість 250 OK. Далі набираємо команду для завдання адреси одержувача листа rcpt to: email (email – адреса одержувача). Після цього, набравши команду data можна приступити до введення заголовка листа і після порожній рядки його тіла, яке повинно закінчуватися двома символами переведення рядка. Тіло листа може складатися з наступних полів:

From: “Test“- Адреса відправника
To: “new“- Адреса одержувача
Subject: Перевірка – тема листа
Content-Type: text / html – тип письма

І інші поля, про які докладніше можна прочитати в документації RFC 822.
З урахуванням вищевикладеного можна розглянути діалог сервера з користувачем після введення команди data:

User: From: “Test
User: To: “new
User: Subject: Перевірка
User:
User: Привіт! Це тестове лист
User: Поки!

В кінці ссесіі ми повинні набрати команду quit.
Якщо ви хочете програмувати для Інтернет не тільки поштові програми, то вам допоможуть компоненти з розділу FastNet, NMFTP – для роботи по популярному протоколу FTP (File Transfer Protocol – протокол передачі файлів). Він документований в RFC 959. За допомогою FTP можна закачувати інформацію, веб – сторінки на сервер, а також завантажувати програмне забезпечення, документація з безкоштовних FTP серверів. Компонент TNMFinger призначений для реалізації протоколу Finger, який представляє собою адресну книгу в Інтернеті. По ньому ви можете дізнатися інформація про цікавить вас сервері. І звичайно ж не залишився в стороні найбільш використовуваний протокол в мережі Інтернет – HTTP (HyperText Transfer Protocol). Протокол для передачі гіпер – тексту. Його ми щодня використовуємо для перегляду странічік у Всесвітній павутині WWW. Також варто приділити увагу розділах Internet Express і Internet в палітрі компонентів. У цих розділах знаходиться зручний міні – браузер для перегляду html – сторінок, компонент для розбору html – Файлів та інші корисні речі.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*