Вичерпна інструкція по php mailer - sesmik cms інтернет-магазин під ключ

Стандартне електронного листа - це звичайний текст, що і використовується більшістю розробників, тому створення MIME заголовків для HTML листів може стати складним процесом. Тепер труднощі вам не загрожують, потомучто у вас є чудова бібліотека PHPMailer, яка, до того ж, безкоштовна.

У цьому навчальному курсі ми будемо детально обговорювати особливості та можливості цієї бібліотеки.

вимоги

Вимоги у даній бібліотеки дуже скромні. Вам потрібен тільки PHP і можливість відсилати листи посредствам команди mail () або через SMTP з'єднання.

Також ви повинні розуміти основи об'єктно-орієнтованого програмування (ООП), або, по крайней мере, розуміти як правильно застосовувати дані нижче приклади.

Не хвилюйтесь! Цей курс досить простий!

Про PHPMailer

Що може PHPMailer

На момент написання цього навчального курсу PHP Mailer вмів:

розробники PHPMailer

  • Brent R. Matzelle
  • Patrice Fournier
  • Chris Ryan
  • Cem Hurturk
  • Tom Klingenberg
  • Jaime Bozza

Я висловлюю цим людям свою вдячність, потомучто вони стільки зробили, щоб прискорити розвиток моїх проектів, включаючи PHPFreaks.com!

Готуємо PHPMailer для використання

Завантажити і розпакувати

Тепер, коли всі файли на своїх місцях, давайте створимо файл конфігурації нашого проекту.

Створення і використання файлу конфігурації

Одна з головних речей, яку я люблю робити перед створенням сайту - це написання файлу конфігурації, він буде містити установки до яких я, можливо, буду звертатися багато разів. І так, я створюю файл з назва config.php в /home/mywebsite/public_html/config.php. Створюємо внем масив з назвою $ site з моїми ключами і значеннями, які я буду використовувати надалі. У цьому керівництві я опишу змінні, які ми будемо використовувати в класі PHPMailer. Ось приклад мого файлу config.php:

Цей приклад дуже простий, щоб пояснювати його. Далі ми продовжимо свою роботу і будемо брати ці настройки при необхідності.

Створюємо клас, який розширює PHPMailer

Відразу наголошу, що ви повинні створити клас розширення, це дозволить спростити вам життя, далі я покажу як.

Кожен з цих параметрів береться за замовчуванням з файлу config.php. але ви також можете переписати їх при виклику нашого класу розширення. Таким чином, якщо ви не перевизначите будь-якої з параметрів в класі розширення, то він буде взятий за замовчуванням з файлу config.php. і вам не треба кожного разу перевизначати ці параметри. В цьому і краса даного підходу!

Погляньте на наш клас розширення:

Далі ми розглянемо цей код.

Розберемо клас FreakMailer

Наш клас, показаний вище, дуже простий. І вам необхідно володіти тільки базовими навичками ООП, щоб використовувати його. Давайте розберемося.

Спочатку нам необхідно підключити клас PHPMailer (файл class.phpmailer.php в директорії lib). Це дозволяє нам розширити клас PHPMailer, тому що робить об'єкт доступним. Ви могли б підключити його і в іншому місці, але тут це найбільш ефективно.

Структура управління класом

Далі, ми визначаємо структуру управління класом і даємо йому ім'я при розширенні класу PHPMailer.

змінні класу

Йдемо далі. Тепер ми визначаємо внутрішні змінні. Більшість з них встановлені за замовчуванням в NULL. щоб пізніше ми могли їх перевизначити, якщо є необхідність замінити значення, встановлені в config.php.

Давайте розглянемо ці змінні:

Після визначення змінних, ми з вами можемо обговорити функцію FreakMailer ().

Функція FreakMailer ()

Ця функція, в основному, налаштовує початкові значення для класу PHPMailer, щоб посилати пошту.

Спочатку ми викликаємо масив $ site з файлу config.php. щоб мати можливість використовувати його в межах даної функції і класу. Щоб зробити це є два способи: передати масив при виклику класу або зробити масив глобальним. Останній спосіб найлегший і він працює, тому його і використовуємо!

Всі подальші дії - це, в основному, визначення значень змінним класу PHPMailer. Якщо внутрішня змінна ($ this-> setting) не визначена, ми беремо значення з файлу config.php. Я вже згадував про те, що ви можете перевизначити значення з config.php. тут ми перевіряємо це.

Найголовніше, що ви повинні зрозуміти, це те, що всі можливості PHPMailer все ще присутні і можуть використовуватися, незважаючи на те, що ми його розширили. Єдине, що ми зробили тут - це створили розширення, яке піклується про те, щоб нам не треба було кожного разу вводити одні й ті ж дані, коли ми хочемо послати повідомлення.

Тепер, коли ми досить маємо уявлення про клас розширення, давайте спробуємо відправити пошту!

Відправлення електронної пошти засобами PHPMailer

Попередня робота зроблена і тепер у нас є все, щоб надсилати листи засобами PHPMailer.

первісне випробування

Це випробування дуже важливо, тому що в рамках даної статті ми будемо постійно повертатися до наведеного тут коду. Якщо даний код у вас не запрацює, перечитайте цей матеріал спочатку і знову спробуйте. Наш перший приклад ми збережемо у файлі mailtest.php. який покладемо в корінь нашого проекту. Ось його зміст:

Давайте розберемо цей код для кращого його розуміння.

Спочатку ми підключаємо наш конфігураційний файл, щоб мати доступ до масиву $ site.

Далі, підключаємо клас FreakMailer.

Тепер необхідно ініціалізувати наш клас розширення, а також клас PHPMailer.

Тепер PHPMailer готовий і ми йдемо далі.

Якщо ви використовуєте в якості листи звичайний текст, то необхідно розділяти рядки або. І ви повинні використовувати подвійні лапки при визначенні змінної $ mailer-> Body. Якщо ви використовуєте одинарні лапки, то перенесення тексту з одного рядка на іншу можливий за допомогою клавіші.

Далі, посилаємо повідомлення і обробляємо помилки, якщо виникли.

У разі помилки - ви побачите повідомлення "Не можу відіслати листа!", В іншому випадку - "Лист відіслано!".

Якщо вам тільки що прийшло повідомлення, яке ви відіслали за допомогою PHPMailer, - вітаю!

Основні проблеми

Ось список деяких (типових) проблем, які можуть виникнути у вас при відправленні пошти за допомогою PHPMailer (найімовірніше, ці проблеми у вас виникли б і при звичайному відправленні листів):

  • на вашій машині не встановлена ​​або не запущено жодного SMTP сервера;
  • неправильні настройки всередині PHP скрипта, перечитайте навчальний курс ще раз;
  • Сервер Apache не дозволяє релей через SMTP сервер на локальній машині (типовий випадок);
  • ви не правильно визначили одержувача листа.

Але, якщо у вас все запрацювало, давайте перейдемо до відправки листів з певними особливостями.

Використання додаткових можливостей PHPMailer

Якщо ви вже тут, але не Новомосковсклі при цьому попереднього матеріалу - поверніться і прочитайте, бо тут ми будемо займатися розширенням базового прикладу.

Пам'ятайте, що ми спираємося на основний приклад, наведений вище.

Якщо не визначити FromName, то більшість поштових клієнтів в якості імені підставлять емаил.

Додавання кількох одержувачів

Цей метод дозволяє вам додати кількох одержувачів для письма. Я не рекомендую цей спосіб для анонімних листів розсилки. Дивіться пізніше приклад для списку розсилки.

Додати одержувачів точної копії (CC)

Ви можете додати одержувачів точної копії точно також, як і попередніх прикладах, використовуючи функцію AddCC.

Додавання одержувачів сліпий точної копії (BCC)

Невидимих ​​одержувачів або BCC можна додати використовуючи наступну функцію:

Вимога підтвердження прочитання

Якщо ви хочете запросити у людини, Новомосковскющего ваш лист, підтвердження про прочитання, подайте наступну команду:

Відправлення листів у вигляді HTML за допомогою PHP і PHPMailer

Формування HTML листи - це одна з найскладніших завдань при відправці пошти засобами PHP. Налаштування MIME заголовків і побудова HTML - нелегке завдання і вимагає додаткових знань і досліджень. Однак, PHPMailer зробить ваше життя простіше, далі, ми покажемо як це реалізується.

Важливе зауваження щодо пошти у вигляді HTML

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

Як ви бачите, я зробив кожен URL повним, а не скороченою щодо мого документа. Якщо цього не зробити, то ваші зображення не будуть завантажуватися і користувач їх не побачить!

Йдемо далі, тепер нам необхідно відіслати наш лист. Для цього нам необхідно визначити тіло нашого листа і задати isHTML настройки. Наступний приклад розширює початковий базовий приклад.

Додаткові "тіла" листи

Ніколи не покладайтеся лише на HTML при відправці листів, якщо ваше повідомлення дуже важливе. Ви повинні подбати про одержувача і крім HTML листи прикріпити і тільки text-only (тільки текст) версію повідомлення, оскільки деякі поштові клієнти не вміють показувати HTML листи. Ми можемо досягти такого ефекту додаючи додаткові тіла листи функцією AltBody класу PHPMailer. Давайте додамо текстову версію Вашого повідомлення. Як тільки ми додаємо кілька тіл листи - PHPMailer автоматично сформує багатошарове лист.

Прикріплення файлів до листа

Функція AddAttachment має 4 аргументу:

Шлях до файлу, природно, повний шлях до файлу на диску, ім'я файлу - назва файлу, який ви хочете прикріпити, кодування - за замовчуванням base64, тип заголовка - це тип заголовка, який ви хочете послати - за замовчуванням - Application / octet-stream.

Як бачите, все дуже легко! Давайте перейдемо з вами до використання SMTP.

Використання зовнішнього (їх) SMTP для роботи з поштою засобами PHP

Спочатку давайте обговоримо використання зовнішнього SMTP замість локального. У базовому прикладі ми з вами зробили config.php. де поставили кілька варіантів для SMTP сервера. Якщо ви хочете вказати більше SMTP серверів - зробити це можна також розширивши config.php. встановивши $ site [ 'smtp_enabled'] = 'enabled'; (Включено).

В $ site [ 'smtp_host'] ви можете розширити список SMTP серверів, розділяючи їх крапкою з комою. наприклад:

Як я розумію, PHPMailer спробує послати пошту через перший сервер, якщо це не вдається - через другий і так далі.

Важливе зауваження, звертаю вашу увагу, що для відправки листів через SMTP необхідно використовувати не стандартну функцію Send (). а функцію SMTPSend (). наприклад:

Проблеми з відправкою через SMTP

Є багато варіантів виникнення помилок при роботі з SMTP, в основному, всі вони стосуються прав доступу:

Використання qmail і Sendmail

Якщо ви хочете обійти функцію mail () PHP і використовувати бінарні програми для роботи з поштою, то вам необхідно визначити тип поштового сервера, а потім PHPMailer запустить вказаний бінарний файл, що, можливо, трохи прискорить операції. приклад:

Приклад списку розсилки

Розбір коду списку розсилки

Перша частина така ж, як і в нашому першому прикладі - ми підключаємо необхідні файли.

Зверніть увагу на умовний тег. Пізніше, коли ми будемо виконувати дії в циклі, командою str_replace () ми замінимо цей канал на ім'я користувача з бази даних.

Далі, ми инициализируем клас для роботи з поштою.

Тепер ми дійшли до місця, де відбувається безпосередня відсилання пошти. Надзвичайно важливо розібратися в тому, що ми тут справах. Перша частина коду в основному займається формуванням змінної $ member_name. яка буде містити всі дані поточного користувача.

Наступна частина коду визначає переваги користувача - HTML або plain-text. Якщо користувач вважає за краще HTML, то ми пошлемо йому лист у вигляді HTML з включеним тілом текстового листи. В іншому випадку - пошлемо тільки текстовий варіант.

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

Підведемо підсумок

Цей навчальний курс повинен дати вам хороший поштовх в тому, щоб зробити своє життя простіше при роботі з поштою. І все це - завдяки чудовій бібліотеці PHPMailer. Тепер ви можете посилати пошту незадумиваясь про заголовках та інших труднощах.

Якщо ви налаштуєте даний клас правильно, то в подальшому, при створенні інших сайтів, вам не треба буде витрачати свій час.