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

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

    Многие из нас видели подобные письма в 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.

    Комментарии

    11.06.2019 08:27:31
    Avatar of MiraClultMiraClult
    Работа в интернете
    14.06.2019 05:15:44
    Avatar of AntonClultAntonClult
    Работа в интернете
    09.07.2019 11:50:32
    Avatar of WinstonWinston
    I just wondered if you've planned any effective marketing yet for your site this year. I'm self-employed doing this for various businesses for numerous years now, I feed my family doing this so I won't complain. I've a method of getting immediate interested traffic and buyers to your website through social networking channels and email. In addition to getting more likes, followers for all your social media accounts. I've a brand new program that has just been completed that listens to all social mentions being made, in case a certain word or phrase is detected, we instantly send back to them a message that they need to visit your site. We could use as many search terms as we wish, hundreds of targeted visits a day. I can also help you to make/update your website, fix site errors add updates etc. If you might need it.

    In addition to that, I'd also like to discover what your competitors have done that you havn't done yet and address those issues asap. I'd also like to create a video or 2 about your website and encourage them to rank high pretty quickly. Lastly I have a big database of opt in customers which are enthusiastic about what it is you do, so if you'd like to expand your overall newsletter list let me know, I can enable you to get these records whenever you'd like them. They'd enable you to get instant leads by supplying you with a list of people or businesses that are seeking what it really is you're offering.

    I take advantage of tools a good number of people don't find out about or don't have time to use for themselves and I wish to utilize them on your site. If your're to busy with current clients I get it, I was just wondering was all. I'd like to know if you'd like more information or references, I do have more than I know what to do with.


    Winston
    1.319.423.9473
    12.07.2019 11:58:39
    Avatar of UltimateUltimate
    Hi, would you like more business leads at a lower cost? Currently http://Get-More-Leads-Now.com is offering our popular unlimited lead generation software package - at a reduced price for a limited time.

    Download and install now to be building databases of leads in minutes:

    http://Get-More-Leads-Now.com

    The Ultimate Lead Generation Pack works by automatically visting yellow page directories and building a database according to your search terms. Other software in the pack then finds emails, phone numbers, and other details for that database. The results can be used for email, cold-calling, direct mail, or to sell immediately - priced per lead. Runs on Windows, Mac, and Linux with multiple job and VPN/proxy support. Similar software retails for over $100 with less features.

    This pack is only available on sale as a short promotional offer, please download now if at all interested.

    Click Here: http://Get-More-Leads-Now.com

    Have a Great Day,
    The Ultimate Lead Generation Pack Team

    unsubscribe/remove Here: http://get-more-leads-now.com/r.php?url=konservs.com&id=ulg14
    02.11.2019 12:31:32
    Avatar of UltimateUltimate
    Hi, would you like more business leads at a lower cost? Currently http://Get-More-Leads-Now.com is offering our popular unlimited lead generation software package - at a reduced price for a limited time.

    Download and install now to be building databases of leads in minutes:

    http://Get-More-Leads-Now.com

    The Ultimate Lead Generation Pack works by automatically visting yellow page directories and building a database according to your search terms. Other software in the pack then finds emails, phone numbers, and other details for that database. The results can be used for email, cold-calling, direct mail, or to sell immediately - priced per lead. Runs on Windows, Mac, and Linux with multiple job and VPN/proxy support. Similar software retails for over $100 with less features.

    This pack is only available on sale as a short promotional offer, please download now if at all interested.

    Click Here: http://Get-More-Leads-Now.com

    Have a Great Day,
    The Ultimate Lead Generation Pack Team

    unsubscribe/remove Here: http://get-more-leads-now.com/r.php?url=konservs.com&id=ulg15
    Captcha Обновить
    Go Top