2013-09-03 4 views
1

Я пытаюсь отправить календарь календаря на gmail/yahoo/outlook. Для этого я используюУведомление о событии с календарем через PHP CURL

  $from_name = "My Name"; 
      $from_address = "[email protected]"; 
      $subject = "Meeting Booking"; //Doubles as email subject and meeting subject in calendar 
      $meeting_description = "Here is a brief description of my meeting\n\n"; 
      $meeting_location = "My Office"; //Where will your meeting take place 


      //Convert MYSQL datetime and construct iCal start, end and issue dates 
      $meetingstamp = strtotime($meeting_date . " UTC");  
      $dtstart= gmdate("Ymd\THis\Z",$meetingstamp); 
      $dtend= gmdate("Ymd\THis\Z",$meetingstamp+$meeting_duration); 
      $todaystamp = gmdate("Ymd\THis\Z"); 

      //Create unique identifier 
      $cal_uid = date('Ymd').'T'.date('His')."-".rand()."@mydomain.com"; 

      //Create Mime Boundry 
      $mime_boundary = "----Meeting Booking----".md5(time()); 

      //Create Email Headers 
      $headers = array(
        'From:'.$from_name.' <'.$from_address.'>\n', 
        'Reply-To: '.$from_name.' <'.$from_address.'>\n', 
        'MIME-Version: 1.0\n', 
        'Content-Type: multipart/alternative; boundary='.$mime_boundary.'\n', 
        'Content-class: urn:content-classes:calendarmessage\n' 
      ); 
//   $headers = "From: ".$from_name." <".$from_address.">\n"; 
//   $headers .= "Reply-To: ".$from_name." <".$from_address.">\n"; 
// 
//   $headers .= "MIME-Version: 1.0\n"; 
//   $headers .= "Content-Type: multipart/alternative; boundary=\"$mime_boundary\"\n"; 
//   $headers .= "Content-class: urn:content-classes:calendarmessage\n"; 

      //Create Email Body (HTML) 
      $message .= "--$mime_boundary\n"; 
      $message .= "Content-Type: text/html; charset=UTF-8\n"; 
      $message .= "Content-Transfer-Encoding: 8bit\n\n"; 

      $message .= "<html>\n"; 
      $message .= "<body>\n"; 
      $message .= '<p>Dear '.$firstname.' '.$lastname.',</p>'; 
      $message .= '<p>Here is my HTML Email/Used for Meeting Description</p>';  
      $message .= "</body>\n"; 
      $message .= "</html>\n"; 
      $message .= "--$mime_boundary\n"; 

      //Create ICAL Content (Google rfc 2445 for details and examples of usage) 
      $ical = 'BEGIN:VCALENDAR 
      PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN 
      VERSION:2.0 
      METHOD:PUBLISH 
      BEGIN:VEVENT 
      ORGANIZER:MAILTO:'.$from_address.' 
      DTSTART:'.$dtstart.' 
      DTEND:'.$dtend.' 
      LOCATION:'.$meeting_location.' 
      TRANSP:OPAQUE 
      SEQUENCE:0 
      UID:'.$cal_uid.' 
      DTSTAMP:'.$todaystamp.' 
      DESCRIPTION:'.$meeting_description.' 
      SUMMARY:'.$subject.' 
      PRIORITY:5 
      CLASS:PUBLIC 
      END:VEVENT 
      END:VCALENDAR'; 

      $message .= 'Content-Type: text/calendar;name="meeting.ics";method=REQUEST;charset=utf-8\n'; 
      $message .= 'Content-Type: text/calendar;name="meeting.ics";method=REQUEST\n'; 
      $message .= "Content-Transfer-Encoding: 8bit\n\n"; 
      $message .= $ical;  

      $mail_vars = array(
       'from_name' => $from_name, 
       'from' => $from_address, 
       'to' => $email, 
       'subject' => $subject, 
       'headers' => $headers, 
       'body' => $message, 
      ); 
      echo "<pre>"; 
      //print_r($mail_vars); 
      echo "</pre>"; 

Примечание: Я не упомянуть о функции почты() здесь если я посылаю это через простую почту() функцию, он работает нормально. Но, если я отправляю одну и ту же почту, используя CURL, я не получаю вложение файла .ics, а также письмо не отформатировано. Просто, почта выглядит эта

Это код CURL

first way :      

    $ch = curl_init($posturl); 
          curl_setopt($ch, CURLOPT_POST,1); 
          curl_setopt($ch, CURLOPT_POSTFIELDS,$vars); 
          curl_setopt($ch, CURLOPT_HEADER,0); // DO NOT RETURN HTTP HEADERS 
          curl_setopt($ch, CURLOPT_RETURNTRANSFER ,1); // RETURN THE CONTENTS OF THE CALL 
          $Rec_Data = curl_exec($ch); 
second way : 
       $ch = curl_init($posturl); 
       curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
       curl_setopt($ch, CURLOPT_HTTPHEADER, $mailparams['headers']); 
       curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); 
       curl_setopt($ch, CURLOPT_USERPWD, $userpwd); 
       curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'PUT'); 
       curl_setopt($ch, CURLOPT_POSTFIELDS, $body); 
       $Rec_Data = curl_exec($ch); 

Если я использую первый способ, я могу иметь возможность отправлять почту, но не отформатирован. Во втором случае почта не собирается.

Пожалуйста, проверьте и дайте мне знать. Спасибо заранее!

+0

Я только что узнал, что отправка писем с использованием cURL на самом деле вещь. – timgws

+0

Вы ясно понимаете мой вопрос. @ Timgws –

ответ

0

Даже я тоже старался работать с завитом, но это не возможно для меня. Итак, я, наконец, работал с простой почтовой функцией. Это быстро и легко. Действуй.

0

"[...] but that is not formatted [...]" Что вы подразумеваете под этим? В HTML, который вы отправляете, нет форматирования, поэтому он отправляется правильно.

Может быть, что Content-Type: text/calendar есть там дважды? Попробуйте избавиться от первого (с ;charset=utf-8 там) и посмотрите, не изменилось ли это.

Кроме того, я не вижу, как это должно измениться, но попробуйте удалить пробелы внутри строк.

Существует также мимическая граница, отсутствующая внизу письма. Что произойдет, если вы попытаетесь добавить это?

+0

Мы можем отправить электронное письмо с тем же кодом, используя mail(). Мы сталкиваемся с проблемой только при прохождении заголовков через CURL. Но, это обязательно, чтобы передать заголовки, как это. –

+0

Есть ли какая-либо особая причина, по которой вы используете cURL для отправки почты или использования функции mail() PHP? Не работает ли mail() в вашей среде? Вы пытались использовать библиотеку swiftmailer вместо cURL? – timgws

Смежные вопросы