2016-09-27 4 views
-2

Мне нужно прикрепить файл календаря Outlook (.ics) к электронной почте с помощью функции mail.Как подключить .ics к электронной почте?

Это то, что у меня есть сейчас, но оно не работает.

<?php 

$firstname = $_POST["firstname"]; 
$lastname = $_POST["lastname"]; 
$email = $_POST["email"]; 
$companyname = $_POST["company"]; 

$file = "webinar-041016.ics"; 
$content = file_get_contents($file); 
$content = chunk_split(base64_encode($content)); 

$EmailTo = "[email protected]"; 
$Subject = "New Webinar Registration"; 

// prepare email body text 
$Body .= "Firstname: "; 
$Body .= $firstname; 
$Body .= "\n"; 

$Body .= "Lastname: "; 
$Body .= $lastname; 
$Body .= "\n"; 

$Body .= "Email: "; 
$Body .= $email; 
$Body .= "\n"; 

$Body .= "Company Name: "; 
$Body .= $companyname; 
$Body .= "\n"; 

$headers = 'From: [email protected]' . "\r\n" . 
     'Reply-To: [email protected]' . "\r\n" . 
     'X-Mailer: PHP/' . phpversion(); 

$conf_subject = "Registration Complete ..."; 

$conf_body = "Dear " . $firstname . ",\n\nThank you..." ; 
$conf_body .= "Content-Type: text/calendar; name=\"".$file."\"\r\n" ; 
$conf_body .= "Content-Transfer-Encoding: quoted-printable\r\n"; 
$conf_body .= "Content-Disposition: attachment; filename=\"".$file."\"\r\n\r\n"; 
$conf_body.= $content."\r\n\r\n"; 

$conf_headers = 'From: [email protected]' . "\r\n" . 
     'Reply-To: [email protected]' . "\r\n" . 
     'X-Mailer: PHP/' . phpversion(); 

// send email 
$success = mail($EmailTo, $Subject, $Body, $headers); 
$conf_mail = mail($email, $conf_subject, $conf_body, $conf_headers); 
// redirect to success page 
if ($success){ 
    echo "success"; 
}else{ 
    echo "invalid"; 
} 
//Attached is an Outlook calendar invite so that you can plan your day accordingly.\n\n 
?> 

Что мне здесь делать? Неправильно ли мое кодирование?

+0

Ваш сценарий открыт для инъекций, ваша структура MIME даже не существует, существует множество возможностей для неправильной кодировки. Вам будет намного проще, если вы [используете PHPMailer] (https://github.com/PHPMailer/PHPMailer), как вы отметили свой вопрос. В текущей версии есть даже класс встроенного ICS. – Synchro

+0

Мне нужно решение с опцией электронной почты. – stormec56

+0

Почему? PHPMailer по умолчанию использует 'mail()', но ваша проблема заключается не в вызове 'mail', а в создании правильного сообщения для его передачи, и это ни в коем случае не является простым. – Synchro

ответ

0

Вы, возможно, уже видели это:

PHP Sending Mail

Как предложение вы могли бы хотеть иметь взгляд в PHPMailer, который сужает работу, которую вы должны сделать, к одной строке кода:

$mail->addAttachment('/var/tmp/file.tar.gz'); 
+0

Календарные письма не совсем похожи на обычные вложения - они представляют собой трехсторонние многополярные/альтернативные структуры. К счастью, PHPMailer имеет поддержку для этого - посмотрите на свойство «Ical». – Synchro

+0

Но вы все равно можете отправить их в виде файла, его не нужно интерпретировать как многостраничную/альтернативную структуру. –

+0

Официально это вообще делает, однако на практике это еще сложнее. См. [Эта ошибка] (https://github.com/PHPMailer/PHPMailer/issues/175) и [этот] (https://bugzilla.mozilla.org/show_bug.cgi?id=505024). – Synchro