问题
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.
回答1:
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;
}
回答2:
add the following line to your phpMailer script. It took me some hours to find out myself!
$mail->AddStringAttachment("$ical", "$nameofattachtment", "base64", "text/calendar; charset=utf-8; method=REQUEST");
来源:https://stackoverflow.com/questions/14277002/php-send-ical-using-php-mailer