Может ли кто-нибудь вести меня в правильном направлении.
Я пытаюсь отправить мои все события календаря моим пользователям, используя почту. У меня есть функция php, которая работает в соответствии с моими ожиданиями. Я пытаюсь реализовать те же функции в zend framework, используя zend_mail.
Вот работающая функция.
function sendIcalEmail($firstname,$lastname,$email,$meeting_date,$meeting_name,$meeting_duration) { $from_name = "RK"; $from_address = "m.ravikant10@gmail.com"; $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; } }
Я попытался изменить заголовки zend и тело сообщения, но оно не работает. Как и в функции, есть несколько заголовков, отправляемых в тело сообщения.
//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:xyz@gmail.com 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);
Не могли бы вы опубликовать свою текущую попытку с помощью Zend_Mail? Предоставленный вами фрагмент не имеет ничего общего с вашей проблемой Zend_Mail.
Обновление: я проверил ваш код, и все работает. Убедитесь, что содержимое ther $ ical var точно совпадает. Код, который я использовал для тестирования:
$email = new Zend_Mail('UTF-8'); $email->setFrom('someone@somewhere.com', 'Someone'); $email->addTo('someone@somewhere.com', '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();