phpphpmailericalendarvcal

PHP : send ical using php mailer


I am trying to send the ical using the php mailer

here id my function

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



    //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: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;            

    //SEND MAIL


    $mail->AddAddress($email);

    $mail->Subject =  $subject;
    $mail->IsHTML(true);
    //$mail->AddAttachment($message);
    $mail->Body =$message;
    if(!$mail->Send())
    {
        $message= "Error sending: " . $mail->ErrorInfo;

    }


}

I am using php mailer but unfortunately mail is not coming yp in ical format .

Please tell me what i am doing wrong .

I am also not getting a way to send the header along this mail.


Solution

  • Try adding a content-type of "multipart/alternative". Copying from a function of mine that has worked (it uses PEAR's Mail):

    protected function eF_mail_multipart($sender, $recipient, $subject, $textbody, $calendarbody, $onlyText = false, $bcc = false) {
    
            $hdrs = array('From'    => $sender,
                    'Subject' => $subject,
                    //'To'      => $recipient,
                    'Date' => date("r"));
            if ($bcc) {
                //$hdrs['To'] = '';
            }
    
            $params = array("text_charset" => "UTF-8",
                    "html_charset" => "UTF-8",
                    "head_charset" => "UTF-8",
                    "head_encoding" => "base64");
    
    
            $textparams = array(
                    'charset'       => 'utf-8',
                    'content_type'  => 'text/plain',
                    'encoding'      => 'base64',
            );
    
            $calendarparams = array(
                    'charset'       => 'utf-8',
                    'content_type'  => 'text/calendar;method=REQUEST',
                    'encoding'      => 'base64',
            );
    
    
            $email = new Mail_mimePart('', array('content_type' => 'multipart/alternative'));
    
            $textmime = $email->addSubPart($textbody, $textparams);
            $htmlmime = $email->addSubPart($calendarbody, $calendarparams);
    
    
            $final = $email->encode();
            $final['headers'] = array_merge($final['headers'], $hdrs);
    
            $smtp = Mail::factory('smtp', array('auth'      => $GLOBALS['configuration']['smtp_auth'] ? true : false,
                    'host'      => $GLOBALS['configuration']['smtp_host'],
                    'password'  => $GLOBALS['configuration']['smtp_pass'],
                    'port'      => $GLOBALS['configuration']['smtp_port'],
                    'username'  => $GLOBALS['configuration']['smtp_user'],
                    'timeout'   => $GLOBALS['configuration']['smtp_timeout'],
                    'localhost' => $_SERVER["HTTP_HOST"]));
    
            $result = $smtp -> send($recipient, $final['headers'], $final['body']);
    
            return $result;
        }