2016-09-27 64 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

日历邮件不像常规附件 - 它们是3路多部分/替代结构。幸运的是,PHPMailer已经为此提供了支持 - 查看“Ical”属性。 – Synchro

+0

但是,您仍然可以将它们作为文件发送,但不必将其解释为多部分/替代结构。 –

+0

正式它通常做,但实际上它更加复杂。见[这个bug](https://github.com/PHPMailer/PHPMailer/issues/175)和[this one](https://bugzilla.mozilla.org/show_bug.cgi?id=505024)。 – Synchro

相关问题