2013-01-11 73 views
1

我試圖使用PHP郵件PHP:使用PHP郵件

這裏ID我的功能

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; 

    } 


} 

我使用PHP的郵件,但遺憾的是郵件沒有在iCal來YP發送的iCal發送的iCal格式。

請告訴我我做錯了什麼。

我也沒有得到一個方法來發送這封郵件沿這封郵件。

回答

1

嘗試添加「multipart/alternative」的內容類型。從已經工作過的礦井的功能複製(它使用PEAR的郵件):

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; 
    } 
0

將以下行添加到您的phpMailer腳本中。我花了幾個小時才發現自己!

$ mail-> AddStringAttachment(「$ ical」,「$ nameofattachtment」,「base64」,「text/calendar; charset = utf-8; method = REQUEST」);