Php sendmail відправка пошти з вкладеннями за допомогою php - блог web-розробника koz1024
У цій статті хочу розповісти Вам про те, як відправляти пошту з вкладеннями стандартними засобами PHP, не вдаючись до PEAR і подібним бібліотекам.
Почнемо з азів. Відправка пошти в php виконується за допомогою функції mail:
У найпростішому вигляді це виглядає так:
Якщо результатом роботи вищенаведеного скрипта буде помилка, значить у вашій збірці PHP немає підтримки mail, раджу звернутися до адміністратора.
Тепер розберемося з додатковими заголовками. Що взагалі таке, заголовок листа? Це, відповідно до стандарту RFC-822, одна з частин електронного листа. Тобто, лист складається із заголовків і тіла (також і з "конверта", але це нам зараз не потрібно). Тема завжди знаходиться перед тілом і відділений від нього порожнім рядком. Тема складається з імені та змісту, розділених двокрапкою. Між собою заголовки поділяються так: кожен заголовок починається з нового рядка. Але, краще дивитися на прикладі:
Відправлення листа в HTML-форматі
Більшості завдань вищенаведеного скрипта відправки mail `ів вистачає, але ми підемо далі, і навчимося відправляти листи в HTML-форматі. У цьому також немає нічого складного:
І ще зверніть увагу на те, що escape-послідовності (а саме так називаються конструкції виду \ r \ n) працюють тільки з подвійними лапками!
Що ж нового в цьому скрипті? Ну, по-перше, ми в заголовках вказали тип вмісту (HTML) і кодування. По-друге, просто в тілі написали потрібний нам html-код. Все просто!
Відправлення листів з вкладеннями
Ось ми впритул підійшли до відправки листів на php з вкладеннями.
Все складно? Неправда, давайте розбиратися. Для початку, ми створили унікальний ідентифікатор $ un, з його допомогою ми зможемо розділяти між собою вкладені файли, а також тіло листа. Далі, ми Новомосковськ вміст підключається файлу і заносимо його в змінну $ file.
Але як відбувається відправлення? У заголовках ми вказуємо тип вмісту і наш унікальний роздільник (Content-Type: multipart / alternative; boundary = "----------". $ Un. ""). А в тілі листа, розділяючи роздільником, пишемо спочатку текст, потім вкладений файл:
Пишемо, природно, із зазначенням типу вмісту (Content-Type) і типу конвертації (Content-Transfer-Encoding).
chunk_split (base64_encode ($ file)) - це і є вкладення нашого файлу (пам'ятаєте, ми в змінну $ file внесли вміст?), попередньо його конвертіровав в base64
Готова функція відправки пошти з вкладенням
Якщо терплячий Новомосковсктель дочитав до цього місця, то ось універсальна функція відправки пошти з вкладенням:
З отриманими знаннями, Ви без зусиль розберетеся в роботі цієї функції. Сподіваюся, вона стане Вам у пригоді!
Відправлення листа в HTML форматі з картинками
Хотів написати цей розділ відразу після "Відправлення листа в HTML-форматі", і це було б логічно. Але. Розділ б вийшов дуже громіздким, а користуючись функцією, яку я описав вище, можна легко передавати листи в форматі HTML та ще й з картинками. Скажу лише про те, що самі картинки повинні являтся частиною html коду, а замість посилань на них - використовуватися cid - ідентифікатори
Ви знайшли те, що шукали? Та ні
"Готова функція відправки пошти з вкладенням" Немає запису прикріплюється до листа у вигляді файлу, а йде в тілі листа у вигляді тексту
AntonMMF. і всі, хто використовує функцію: щоб не виводився файл в тілі листа, приберіть подвійні переноси рядків "\ r \ n \ r \ n" (замініть на одинарні) і спробуйте написати все заголовки в один рядок і все тіло в один рядок Я, на жаль, зараз не можу, але пізніше обов'язково підправлю це в статті, покажу як треба. AntonMMF. спасибі, що помітили!
Дуже вчасно) Дякую.
Дякую за скрипт. Але у мене чомусь лист на пошту не приходить.
nezabudka. причин може бути багато: від налаштувань сервера, до пропущеної коми; потрібно дивитися, розбиратися, що в конкретному Вашому випадку
Content-Type самого листа повинен бути multipart / mixed, а не alternative. Alternative використовується, коли лист містить кілька різних уявлень одного і того ж. Наприклад, поштові клієнти при відправки HTML-листів часто включають звичайну текстову версію того ж листи. Для цього використовується повідомлення в типом multipart / alternative, і далі частини з типами text / plain, text / html. Поштовий клієнт на приймаючій стороні, що розуміє HTML, покаже вміст з типом text / html, а якщо виявиться, що поштова програма стара і не розуміє HTML (або користувач вимкнув), то буде використовуватися частина з типом text / plain.
Цікаво, але система враховує тільки перший заголовок з "From: [email protected] \ r \ n Content-type: text / html; charset = utf-8 \ r \ n X-Mailer: PHP mail script" І не важливо, який саме параметр ставити першим. За прикладом коректно виставляється "from", але формат листа текстовий