【问题标题】:sending ical through zend_mail通过 zend_mail 发送 ical
【发布时间】:2013-07-12 20:22:54
【问题描述】:

谁能指引我正确的方向。

我正在尝试使用邮件将我的所有日​​历活动发送给我的用户。我有一个 php 函数,它按照我的期望工作。我正在尝试使用 zend_mail 在 zend 框架中实现相同的功能。

这是正在运行的函数。

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);

【问题讨论】:

    标签: php zend-framework icalendar zend-mail


    【解决方案1】:

    您能否发布您当前使用 Zend_Mail 的尝试?您提供的 sn-p 与您的 Zend_Mail 问题无关。

    更新: 我测试了你的代码,一切似乎都正常。确保 $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();
    

    【讨论】:

    • 我已经更新了我的问题并添加了代码。标题现在是评论。
    • 这两个代码都在工作并将 calendar.ics 显示为附件。但在 Outlook Zend 代码中不显示接受和拒绝选项。
    • 我明白了。似乎与您的代码没有直接关系。 Microsoft 不以这种方式直接支持 ical 事件。请参阅这篇文章:support.microsoft.com/kb/944094/en-us 似乎存在某种错误,其中存在的约会会提示某种更新。您的“考试预约”是否可能已经出现在您的 Oulook 日历中?
    • 约会是由网络应用随机创建的。所以它们不能出现在前景中。如果可能的话,请执行我的第一段 php 代码。您将自动获得所有选项。无需提前添加约会。
    • 我已经测试了您的代码并且它有效。生气了。用ZF代码测试过,失败。再次测试。似乎 Ical 的内容具有 Outlook 工作的关键细节。为了排除任何 Ical 请求错误,我在我的 ZF 测试代码中使用了您的 $ical var,它起作用了。玩了一点头球,但它们并没有真正的区别。我猜我的(手动编写的)Ical 请求不符合 Outlook 的标准。你能用 ZF 代码测试你生成的 $ical 值吗?
    猜你喜欢
    • 2019-06-04
    • 1970-01-01
    • 2011-10-25
    • 2018-10-04
    • 2015-07-09
    • 2011-11-20
    • 2011-05-27
    • 2018-03-18
    • 2011-01-24
    相关资源
    最近更新 更多