PHP mail()使用iCalendar发送原始电子邮件

PHP mail()使用iCalendar发送原始电子邮件,php,windows,email,icalendar,Php,Windows,Email,Icalendar,我希望能够发送一封多部分/备选电子邮件(尤其是文本/日历编码的邮件),以便outlook、gmail等打开菜单与附加的约会进行交互(允许用户将其添加到自己的个人日历中)。电子邮件服务器是另一个框,显然我是通过匿名SMTP发送的。以下是传递到php 5.3.6 mail()方法的标题和消息: 电子邮件发送成功,但我发现我传入的$message被视为原始HTML(以下内容出现在电子邮件的实际正文中): ——会议预订——b37b5edb86b3e7047ce15b2b348159d7 内容类型:tex

我希望能够发送一封多部分/备选电子邮件(尤其是文本/日历编码的邮件),以便outlook、gmail等打开菜单与附加的约会进行交互(允许用户将其添加到自己的个人日历中)。电子邮件服务器是另一个框,显然我是通过匿名SMTP发送的。以下是传递到php 5.3.6 mail()方法的标题和消息:

电子邮件发送成功,但我发现我传入的$message被视为原始HTML(以下内容出现在电子邮件的实际正文中):

——会议预订——b37b5edb86b3e7047ce15b2b348159d7
内容类型:text/html;字符集=UTF-8
内容传输编码:8比特
亲爱的Robert Burnham,

这是我的HTML电子邮件/用于会议描述

--会议预订——b37b5edb86b3e7047ce15b2b348159d7 内容类型:text/calendar;name=“meeting.ics”;method=REQUEST;charset=utf-8\n内容传输编码:8bit\n\n目录:VCALENDAR PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN 版本:2.0 方法:发布 开始:VEVENT 组织者:邮寄至:mailer@personalhealthsurvey.net DTSTART:20121206T134000Z DTEND:20121206T144000Z 地点:我的办公室 运输:不透明 序列:0 UID:2012116T092814-12916@mydomain.com DTSTAMP:2012116T152814Z 描述:以下是我的会议的简要描述 简介:会议预订 优先次序:5 类别:公共 完:维文特 完:VCALENDAR
作为最后一步,我自己完成了这项工作,但拥有oberron的link:会让事情变得更简单。尽管如此,我最终撤销了所有工作,并故意“破坏”iCalendar附件,以便outlook无法识别它。似乎outlook的HTML解析还不够糟糕(因为它使用的是Microsoft Word内置的同一个HTML解析器),当识别出一个“有效”的iCalendar会议附件时,解析器会进入一个我无法解决的极其基本的模式。特别是HTML解析,出了问题……这显然是预期的功能(在outlook中创建电子邮件并附加事件时,该邮件的所有html编辑相关按钮/功能将消失


最后,用户只需点击iCalendar附件,就值得使用可容忍的HTML格式了。

不要对复合/mime电子邮件使用mail()。这太痛苦/难看/错误了。使用合适的邮件包,如Swiftmailer或PHPMailer。它们使之更简单、更简单。mail()对于实际工作来说,它就像一张湿厕纸在纽约的干燥一样有用function——这不值得付出努力,尤其是当你做的事情甚至有点不寻常时。使用类似的类,可以节省很多麻烦。一旦你切换到phpMailer,就可以很容易地向电子邮件添加附件。然后你只需生成iCal代码块,将其作为附件添加,问题就解决了。@SDC,我是已与phpMailer合作,并尝试了您所描述的内容……附件成功,但不会触发Outlook、gmail等显示的与约会互动的“特别菜单”:您是否看过:
From: TestNet
Reply-To: TestNet
MIME-Version: 1.0
Content-Type: multipart/alternative; boundary="--Meeting Booking--fec0d81281514f7f839dc4cf0c117f64"
Content-class: urn:content-classes:calendarmessage
--Meeting Booking--fec0d81281514f7f839dc4cf0c117f64
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit



Dear Robert Burnham,

Here is my HTML Email / Used for Meeting Description



--Meeting Booking--fec0d81281514f7f839dc4cf0c117f64
Content-Type: text/calendar;name="meeting.ics";method=REQUEST;charset=utf-8
Content-Transfer-Encoding: 8bit

BEGIN:VCALENDAR 
PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN 
VERSION:2.0 
METHOD:PUBLISH 
BEGIN:VEVENT 
ORGANIZER:MAILTO:test@test.net 
DTSTART:20121206T134000Z 
DTEND:20121206T144000Z 
LOCATION:My Office 
TRANSP:OPAQUE 
SEQUENCE:0 
UID:20121116T092255-9178@mydomain.com 
DTSTAMP:20121116T152255Z 
DESCRIPTION:Here is a brief description of my meeting


SUMMARY:Meeting Booking 
PRIORITY:5 
CLASS:PUBLIC 
END:VEVENT 
END:VCALENDAR
--Meeting Booking--b37b5edb86b3e7047ce15b2b348159d7
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: 8bit

<html>
<body>
<p>Dear Robert Burnham,</p><p>Here is my HTML Email / Used for Meeting Description</p>
</body>
</html>
--Meeting Booking--b37b5edb86b3e7047ce15b2b348159d7
Content-Type: text/calendar;name="meeting.ics";method=REQUEST;charset=utf-8\nContent-Transfer-Encoding: 8bit\n\nBEGIN:VCALENDAR
PRODID:-//Microsoft Corporation//Outlook 11.0 MIMEDIR//EN
VERSION:2.0
METHOD:PUBLISH
BEGIN:VEVENT
ORGANIZER:MAILTO:mailer@personalhealthsurvey.net
DTSTART:20121206T134000Z
DTEND:20121206T144000Z
LOCATION:My Office
TRANSP:OPAQUE
SEQUENCE:0
UID:20121116T092814-12916@mydomain.com
DTSTAMP:20121116T152814Z
DESCRIPTION:Here is a brief description of my meeting


SUMMARY:Meeting Booking
PRIORITY:5
CLASS:PUBLIC
END:VEVENT
END:VCALENDAR