2013-01-11 3 views
1

내가PHP는 : PHP 메일러

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을 오지 않아 ID를

여기 내 함수를 PHP 메일러를 사용하여 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");