【发布时间】:2013-02-05 21:35:07
【问题描述】:
我希望能够发送多部分/替代电子邮件(特别是文本/日历编码项目,以便 Outlook、gmail 等打开菜单以与附加的约会进行交互(允许用户添加它到他们自己的个人日历)。电子邮件服务器是一个不同的盒子,显然我是通过匿名 SMTP 发送的。以下是传递给 php 5.3.6 mail() 方法的标题和消息:
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
电子邮件发送成功,但是我发现我传入的 $message 被视为原始 HTML(以下内容出现在电子邮件的实际正文中):
--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
【问题讨论】:
-
不要将 mail() 用于复合/mime 电子邮件。这太痛苦/丑陋/错误。使用适当的邮件包,如 Swiftmailer 或 PHPMailer。它们使它变得简单且更加万无一失。 mail() 对实际工作的用处就像一张湿厕纸在纽约晾干一样有用。
-
首先,不要使用 PHP 的内置
mail()函数——这不值得,特别是如果你正在做任何不寻常的事情。使用phpMailer 之类的课程,省去很多麻烦。 -
切换到 phpMailer 后,向电子邮件中添加附件非常容易。然后你可以简单地生成 iCal 代码块,将其添加为附件,问题就解决了。
-
@SDC,我已经弄乱了 phpMailer 并尝试了您所描述的内容...附件是成功的,但是它不会触发 Outlook、gmail 等显示的“特殊菜单”与约会互动:postimage.org/image/wwfyjgzoj
标签: php windows email icalendar