2013-07-15 2 views
2

Может ли кто-нибудь вести меня в правильном направлении.Отправка ical через zend_mail

Я пытаюсь отправить свои все события календаря моим пользователям, используя почту. У меня есть функция php, которая работает в соответствии с моими ожиданиями. Я пытаюсь реализовать те же функции в zend framework, используя zend_mail.

Это функция, которая работает.

function sendIcalEmail($firstname,$lastname,$email,$meeting_date,$meeting_name,$meeting_duration) { 

    $from_name = "RK"; 
    $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 = "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 = ''; 
    $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:REQUEST 
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;    

    //SEND MAIL 
    //echo $message;die; 
    $mail_sent = mail($email, $subject, $message, $headers); 

    if($mail_sent)  { 
     return true; 
    } else { 
     return false; 
    } 

} 

Я попытался изменить заголовок заголовка и тело сообщения, но его не работает. Как и в функции, есть несколько заголовков, отправляемых в тело сообщения.

//Create email 
     $email = new Zend_Mail('UTF-8'); 
     $email->setFrom($senderEmail, $senderName); 
     $email->addTo($toEmail, $toName); 
     $email->setSubject($subject); 

     $timestamp = date('Ymd').'T'.date('His'); 
     $uid  = date('Ymd').'T'.date('His') . "-" . rand() . '@domain.com'; 
     $dtCreated = date('Ymd').'T'.date('His'); 
     $dtStart = date('Ymd', strtotime($start)) . 'T' . date('His', strtotime($start)); 
     $dtEnd  = date('Ymd', strtotime($end)) . 'T' . date('His', strtotime($end)); 
     $eventSubject  = 'adding calendar events'; 
     $eventDescription = $description; 


     $ical = <<<ICALENDAR_DATA 
BEGIN:VCALENDAR 
PRODID:-//Product/Platform/Name//EN 
VERSION:2.0 
CALSCALE:GREGORIAN 
METHOD:REQUEST 
BEGIN:VEVENT 
DTSTART:{$dtStart} 
DTEND:{$dtEnd} 
DTSTAMP:{$timestamp} 
UID:{$uid} 
SUMMARY:{$eventSubject} 
DESCRIPTION:{$eventDescription} 
CREATED:{$dtCreated} 
LAST-MODIFIED:{$dtCreated} 
LOCATION:{$location} 
SEQUENCE:0 
STATUS:CONFIRMED 
TRANSP:OPAQUE 
ORGANIZER:MAILTO:[email protected] 
BEGIN:VALARM 
ACTION:DISPLAY 
DESCRIPTION:My cal request 
TRIGGER:-P0DT0H10M0S 
END:VALARM 
END:VEVENT 
END:VCALENDAR 
ICALENDAR_DATA; 

      //$email->addHeader('Content-class', 'urn:content-classes:calendarmessage'); 
    //$email->addHeader('Content-Type', 'text/calendar; method=REQUEST; charset="UTF-8"'); 
    //$email->addHeader('Content-Transfer-Encoding', '7bit'); 

     $attach = new Zend_Mime_Part($ical); 
     $attach->type  = 'text/calendar'; 
     $attach->disposition= Zend_Mime::DISPOSITION_INLINE; 
     $attach->encoding = Zend_Mime::ENCODING_8BIT; 
     $attach->filename = 'calendar.ics'; 

     $email->addAttachment($attach); 
     $email->setBodyText('name'); 
      $email->send($transport); 

ответ

2

Не могли бы вы опубликовать свою текущую попытку с помощью Zend_Mail? Предоставленный вами фрагмент не имеет ничего общего с вашей проблемой Zend_Mail.

Обновление: Я проверил ваш код и все, кажется, сработало. Убедитесь, что содержимое ther $ ical var точно совпадает. Код, который я использовал для тестирования:

$email = new Zend_Mail('UTF-8'); 
    $email->setFrom('[email protected]', 'Someone'); 
    $email->addTo('[email protected]', 'Someone'); 
    $email->setSubject($subject); 

    $ical = '{valid ical content}'; 

    $attach = new Zend_Mime_Part($ical); 
    $attach->type = 'text/calendar'; 
    $attach->disposition = Zend_Mime::DISPOSITION_INLINE; 
    $attach->encoding = Zend_Mime::ENCODING_8BIT; 
    $attach->filename = 'calendar.ics'; 

    $email->addAttachment($attach); 
    $email->setBodyText('Test body'); 
    $email->send(); 
+0

Я обновил свой вопрос и добавил код. заголовки - комментарий прямо сейчас. –

+0

оба кода работают и показывают calendar.ics как приложение. но в прогнозе zend код dosen't показывает параметры принятия и отклонения. –

+1

Я вижу. Похоже, что это не связано с вашим кодом. Таким образом, Microsoft не поддерживает прямую поддержку таких событий. См. Эту статью: http://support.microsoft.com/kb/944094/en-us Кажется, что есть какая-то ошибка, в которой существует существующая встреча, которая предложит какое-то обновление. Возможно ли, что ваше «тестовое назначение» уже присутствует в вашем календаре Oulook? – RMK

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