Как прикрепить календарь к письму?

Как прикрепить календарь к письму?Как прикрепить календарь к письму?

Многие из нас видели подобные письма в Gmail (когда, например, в Google календаре кто-то нам отправляет приглашение). Похожие вложения существуют и в других почтовых клиентах.

Письма с календарём удобны для назначения встреч, для отправки каких-либо событий. И вовсе не обязательно для этого интегрироваться в «тесную среду» Google.

Ранее я уже рассказывал о том, как правильно отправлять письма в PHP и как прикреплять к письмам файлы. Теперь мы попробуем расширить наш класс и прикрепить Гугл календарь к письму. Все наши действия аналогичны для всех библиотек для работы с почтой – PHPMailer, Pear или SwiftMailer.

Формат iCalendar

Формат iCalendar

iCalendar – это компьютерный формат, который позволяет интернет-пользователям, отправить приглашения на встречи и задачи других пользователей по электронной почте, или с помощью обмена файлами с расширением .ics. Получатели файла iCalendar (При поддержке почтового клиента или приложения календаря) могут легко реагировать отправителю согласием или предложить другую дату и время встречи. (Стандарт RFC 5545).

iCalendar используется и поддерживается большим количеством продуктов, в том числе Календарём Google, Apple Календарём (ранее iCal), IBM Lotus Notes, Yahoo! Календарём, Evolution, частично Microsoft Outlook и Novell GroupWise.

Так что же надо для того, чтобы подключить Google календарь?

Для начала сформируем библиотеку для работы с календариком в формате iCalendar. Нам понадобятся 2 класса - BCalendar (для работы с календарём) и BCalendarEvent - для подключения событий к календарю.

Вот наша основная функция, которая формирует набор данных в формате iCalendar:

  1. /**
  2.  * Метод, формирующий календарь в формате iCalendar.
  3.  */
  4.  public function print_icalendar(){
  5.    $data='';
  6.    $data.='BEGIN:VCALENDAR'.PHP_EOL;
  7.    $data.='PRODID:-//Brilliant//Brilliant Mailer 1.0.0//EN'.PHP_EOL;
  8.    $data.='VERSION:2.0'.PHP_EOL;
  9.    $data.='CALSCALE:GREGORIAN'.PHP_EOL;
  10.    $data.='METHOD:REQUEST'.PHP_EOL;
  11.    foreach($this->events as $event){
  12.       $data.='BEGIN:VEVENT'.PHP_EOL;
  13.       //Event start
  14.       $dtstart_utc=clone $event->dtstart;
  15.       $dtstart_utc->setTimezone(new DateTimeZone('UTC'));
  16.       $data.='DTSTART:'.$dtstart_utc->format('Ymd\THis\Z').PHP_EOL;
  17.       //
  18.       $dtend_utc=clone $event->dtend;
  19.       $dtend_utc->setTimezone(new DateTimeZone('UTC'));
  20.       $data.='DTEND:'.$dtend_utc->format('Ymd\THis\Z').PHP_EOL;
  21.       //Date/Time stamp. Looks like current date/time...
  22.       $dtstamp_utc=clone $event->created;
  23.       $dtstamp_utc->setTimezone(new DateTimeZone('UTC'));
  24.       $data.='DTSTAMP:'.$dtstamp_utc->format('Ymd\THis\Z').PHP_EOL;
  25.       //Organizer
  26.       $organizer=$event->organizer_name.':mailto:'.$event->organizer_email;
  27.       $data.='ORGANIZER;CN='.$organizer.PHP_EOL;
  28.       //
  29.       $dtcreated_utc=clone $event->created;
  30.       $dtcreated_utc->setTimezone(new DateTimeZone('UTC'));
  31.       $data.='CREATED:'.$dtcreated_utc->format('Ymd\THis\Z').PHP_EOL;
  32.       //
  33.       $data.='DESCRIPTION:'.$event->description.PHP_EOL;
  34.       //
  35.       $dtmodified_utc=clone $event->modified;
  36.       $dtmodified_utc->setTimezone(new DateTimeZone('UTC'));
  37.       $data.='LAST-MODIFIED:'.$dtmodified_utc->format('Ymd\THis\Z').PHP_EOL;
  38.       //
  39.       $data.='LOCATION:'.$event->location.PHP_EOL;
  40.       $data.='SEQUENCE:0'.PHP_EOL;
  41.       $data.='STATUS:CONFIRMED'.PHP_EOL;
  42.       $data.='SUMMARY:'.$event->summary.PHP_EOL;
  43.       $data.='TRANSP:OPAQUE'.PHP_EOL;
  44.       $data.='END:VEVENT'.PHP_EOL;
  45.       }
  46.    $data.='END:VCALENDAR'.PHP_EOL;
  47.    return $data;
  48.    }

Также в классе присутствуют методы addEvent и createEvent для добавления событий. Не библиотека, а библиотечка прям какая-то :-).

Тестируем отправку

Возьмём за основу библиотеку отправки почты, которую мы писали ранее. Подключить наш календарик не составит труда

Подключение календаря с нашей новой библиотекой выглядит так:

  1. $calendar=new BCalendar();
  2. $calendar->createEvent(
  3.    new DateTime('2015-08-12 23:00'),
  4.    new DateTime('2015-08-12 23:30'),
  5.    'Название события',
  6.    'Описание события',
  7.    'Записки Консерваторов',
  8.    'noreply@konservs.com',
  9.    '25, улица Комарова, Черновцы');
  10. $email=new TEmail();
  11. $email->from_email='noreply@konservs.com';
  12. $email->from_name='От "Записок Консерваторов"';
  13. $email->to_email='*********';
  14. $email->subject='Письмо с календарём';
  15. $email->body('text/html','<p>Письмо в HTML с вложениями.</p>');
  16. $email->attachdata('text/calendar','event.ics',$calendar->print_icalendar());
  17. $result=$email->send();
  18. echo(($result?'Email успешно отправлен.':'Ошибка отправки email!').'<br>');

На почту приходит письмо следующего вида:

Пример письма с календарём

Послесловие

Мы рассмотрели наиболее частую потребность - добавление приглашения на событие. На самом же деле, формат iCalendar поддерживает гораздо большие возможности. Стандарт утверждает что можно даже поднять свой маленький сервис календарей / событий и позволить получателям отвечать на них прям из почтовых клиентов. Но это уже тема отдельной статьи.

Рабочий пример можно скачать тут: email-google-calendar.zip.

Комментарии

07.08.2017 11:55:20
Avatar of AllenmewAllenmew
Сумки мужские через плечо в интернет-магазине BRIALDI с бесплатной ... можете ознакомиться с ассортиментом мужских сумок из натуральной кожи. http://bags.moykrest.ru
18.08.2017 08:01:01
Avatar of FastFundingAdvisorsFastFundingAdvisors
Quicker and Simpler than the SBA, http://FastFundingAdvisors.com can get your business a loan for $2K-350,000 With low-credit and without collateral.

Use our 1 minute form to See exactly how much you can get, No-Cost:

http://FastFundingAdvisors.com/i.php?url=konservs.com&id=e78

If you've been established for at least one year you are already pre-qualified. Our Fast service means funding can be completed within 48 hours. Terms are personalized for each business so I suggest applying to find out exactly how much you can get.

This is a free service from a qualified lender and the approval will be based on the annual revenue of your business. Funds have no Restrictions, allowing you to use the full amount in any way including bills, taxes, hiring, marketing, expansion, or Absolutely Any Other expense.

There are limited SBA and private funds available so please apply now if interested,

Click Here: http://FastFundingAdvisors.com/i.php?id=e78

Have a great day,
The Fast Funding Advisors Team

remove here - http://fastfundingadvisors.com/r.php?url=konservs.com&id=e78
Captcha Обновить
Go Top