Net-SMTP, Perl, Програмування, статті

Philip A. Koryaka, Російський клуб вебмастеров

Іноді при програмуванні для web, виникає необхідність відправити з скрипта на Перлі лист. Існує кілька способів реалізації цього.

Перший спосіб

Можна використовувати програму sendamil. Ми просто відкриваємо її як звичайний файл і на вхід подаємо певні параметри. Наприклад, так:



open (MAIL, “| /usr/lib/sendmail pupkin@host.ru”);
print MAIL “Subject: subj\n\n”;
print MAIL “Text”;
close(MAIL);

При використанні такого коду, ми стикаємося з проблемою. У прийшов адресату листі буде вказана зворотна адреса www@host.ru або щось в цьому роді. Іноді, навіть ім’я сервера не матиме нічого спільного з ім’ям вашого сервера і ось чому: Справа в тому, що web-сервер зазвичай запущений з під певного користувача (www, nobody etc.) Соответствено, ваш скрипт теж виконується з під цього ж користувача (Тому що запускає його web-сервер а не ви). Sendmail визначає цього користувача і вказує в полі “зворотну адресу” його адресу. Іноді можна змиритися з даною проблемою. Наприклад, якщо скрипт посилає дані адміністратору сервера, якому загалом то все одно що буде вказано в полі “зворотну адресу”. Але якщо ваш скрипт взаємодіє з користувачами, краще використовувати другий спосіб.

Другий спосіб



Суть даного способу у використанні стандартного перлового модуля: Net :: SMTP. Розшифровується він як: Simple Mail Transfer Protocol Client. Тобто клієнт для роботи з SMTP протоколом. Ось невеликий приклад використання модуля Net :: SMTP:


use Net :: SMTP; # Підключаємо модуль.$ Smtp = Net :: SMTP-> new (‘smtp.mail.ru’); # Вказуємо SMTP сервер.
$ Smtp-> mail (‘vasya@host.ru’); # Вказуємо від кого лист.$ Smtp-> to (‘pm@host2.ru’); # Вказуємо кому лист.
$ Smtp-> data (); # Починаємо посилку даних
$smtp->datasend(“To: postmaster \n”); # Вказуємо інформацію для поля “Кому”$ Smtp-> datasend (“\ n”); # Порожній рядок$ Smtp-> datasend (“test message \ n”); # Повідомлення$ Smtp-> dataend (); # Закінчуємо посилку даних
$ Smtp-> quit; # Закриваємо з’єднання

Напевно, у вас виникло питання, навіщо вказувати адресата два рази? Справа в тому, що перший раз ми вказуємо куди відправити лист. Другий раз – кому. Як правило, ці адреси співпадають, але можуть і не збігатися. В цьому випадку лист потрапить за першою адресою. Порожній рядок необхідна, щоб відокремити заголовок листа від тексту. У заголовку, крім адреси одержувача можуть бути ще й інші поля. Наприклад:

Subject: Тема повідомлення
X-Mailer: Поштовий клієнт. Можна імітувати відправку з одного з відомих поштових клієнтів.
Content-Type: Тип вмісту. За замовчуванням текст. Але якщо вказати: “Content-Type: text / html; charset = koi8-r”, то вміст листа оброблятиметься у одержувача як HTML.

Що ж уміє клас Net :: SMTP? Ми можемо створювати з’єднання так як було зазначено вище, але іноді необхідно змінити параметри з’єднання. Тоді використовується такий виклик:


  $smtp = Net::SMTP->new('smtp.mail.ru',
Hello => 'me.mail.ru'
Timeout => 30
);

Тут ми зазначаємо, як потрібно привітатися з SMTP-сервером (іноді це необхідно) і максимальний час очікування відповіді сервера. За умовчанням цей параметр дорівнює 120.

Тепер розглянемо, всі доступні нам методи класу Net :: SMTP.
to (адреса [, адреса]) – вказує одержувача. Зауважте, що можна вказувати як один, так і більш e-mail’ов.

data () – ініціює відправку даних.

verify (адреса) – перевіряє вказану адресу на легітимність.

quit () – посилає серверу команду QUIT.

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


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

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

Ваш отзыв

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

*

*