使用 Swift Mailer 和 Sendgrid 发送 ics 日历邀请
Send ics calendar invite using Swift Mailer and Send Grid
我正在尝试使用 sendgrid 和 swiftmailer 向 Gmail 发送日历邀请。这是我的全部代码:
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php
require_once('path/to/lib/swift_required.php');
require('path/to/smtpapi-php.php');
$transport = \Swift_SmtpTransport::newInstance('smtp.sendgrid.net', 587);
$transport->setUsername('uname');
$transport->setPassword('pass');
$mailer = \Swift_Mailer::newInstance($transport);
$ical="BEGIN:VCALENDAR\r\n
PRODID:-//Microsoft Corporation//Outlook 14.0 MIMEDIR//EN\r\n
VERSION:2.0\r\n
METHOD:REQUEST\r\n
Content-Type: text/calendar; charset="utf-8"; name=“invite.ics"; method=REQUEST'."\r\n";
Content-Disposition: inline; filename=“invite.ics"'."\r\n;
BEGIN:VEVENT\r\n
ATTENDEE;CN=aaa@aaa.com;RSVP=
TRUE:mailto:aaa@aaa.com\r\n
CLASS:PUBLIC\r\n
CREATED:20110803T133418Z\r\n
DTEND:20150429T035959Z\r\n
DTSTAMP:20110803T095605Z\r\n
DTSTART:150429T170000Z\r\n
LAST-MODIFIED:20110803T133418Z\r\n
ORGANIZER;CN=\”bbb\”:mailto:
bbb@bbb.com\r\n
PRIORITY:5\r\n
SEQUENCE:0\r\n
SUMMARY;LANGUAGE=ro:New Event\r\n
TRANSP:OPAQUE\r\n
UID:".MD5(TIME())."-85d2-69b00dea0ad4\r\n
X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE\r\n
X-MICROSOFT-CDO-IMPORTANCE:1\r\n
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY\r\n
X-MICROSOFT-DISALLOW-COUNTER:FALSE\r\n
X-MS-OLK-AUTOSTARTCHECK:FALSE\r\n
X-MS-OLK-CONFTYPE:0\r\n
BEGIN:VALARM\r\n
TRIGGER:-PT15M\r\n
ACTION:DISPLAY\r\n
DESCRIPTION:Reminder\r\n
END:VALARM\r\n
END:VEVENT\r\n
END:VCALENDAR\r\n";
$attachment = Swift_Attachment::newInstance()
->setFilename("invite.ics")
->setContentType('multipart/alternative;charset=UTF-8;name="invite.ics";method=REQUEST')
->setBody($ical)
->setDisposition('inline;filename=invite.ics');
$message = new \Swift_Message();
$message->setTo(array('aaa@aaa.com'));
$message->setFrom('bbb@bbb.co');
$message->setSubject('Hello');
$message->attach($attachment);
try {
$response = $mailer->send($message);
print_r($response);
} catch(\Swift_TransportException $e) {
print_r('Bad username / password');
}
?>
</body>
</html>
发生的事情是它正在发送带有 ics 附件的电子邮件,但 gmail 和 outlook 无法识别它是日历邀请。你能帮帮我吗?
我用这个 link 作为参考:
ics file not recognized by outlook
我立即看到的一些问题:
- 您没有指定
text/calendar
内容类型。
- 您在 content-type header 和其他地方使用了错误的引号。 (
”
而不是 "
)。
- 您正在嵌入 triple-newlines (
\n\r\n
),因为您同时拥有 真实 换行符和 \r\n
.
这可能无法解决问题,但这是一个起点。我建议仔细查看您发送的电子邮件的来源,并将其与正常工作的 iMip 邀请进行比较。我想这不是唯一的问题。
我正在尝试使用 sendgrid 和 swiftmailer 向 Gmail 发送日历邀请。这是我的全部代码:
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php
require_once('path/to/lib/swift_required.php');
require('path/to/smtpapi-php.php');
$transport = \Swift_SmtpTransport::newInstance('smtp.sendgrid.net', 587);
$transport->setUsername('uname');
$transport->setPassword('pass');
$mailer = \Swift_Mailer::newInstance($transport);
$ical="BEGIN:VCALENDAR\r\n
PRODID:-//Microsoft Corporation//Outlook 14.0 MIMEDIR//EN\r\n
VERSION:2.0\r\n
METHOD:REQUEST\r\n
Content-Type: text/calendar; charset="utf-8"; name=“invite.ics"; method=REQUEST'."\r\n";
Content-Disposition: inline; filename=“invite.ics"'."\r\n;
BEGIN:VEVENT\r\n
ATTENDEE;CN=aaa@aaa.com;RSVP=
TRUE:mailto:aaa@aaa.com\r\n
CLASS:PUBLIC\r\n
CREATED:20110803T133418Z\r\n
DTEND:20150429T035959Z\r\n
DTSTAMP:20110803T095605Z\r\n
DTSTART:150429T170000Z\r\n
LAST-MODIFIED:20110803T133418Z\r\n
ORGANIZER;CN=\”bbb\”:mailto:
bbb@bbb.com\r\n
PRIORITY:5\r\n
SEQUENCE:0\r\n
SUMMARY;LANGUAGE=ro:New Event\r\n
TRANSP:OPAQUE\r\n
UID:".MD5(TIME())."-85d2-69b00dea0ad4\r\n
X-MICROSOFT-CDO-BUSYSTATUS:TENTATIVE\r\n
X-MICROSOFT-CDO-IMPORTANCE:1\r\n
X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY\r\n
X-MICROSOFT-DISALLOW-COUNTER:FALSE\r\n
X-MS-OLK-AUTOSTARTCHECK:FALSE\r\n
X-MS-OLK-CONFTYPE:0\r\n
BEGIN:VALARM\r\n
TRIGGER:-PT15M\r\n
ACTION:DISPLAY\r\n
DESCRIPTION:Reminder\r\n
END:VALARM\r\n
END:VEVENT\r\n
END:VCALENDAR\r\n";
$attachment = Swift_Attachment::newInstance()
->setFilename("invite.ics")
->setContentType('multipart/alternative;charset=UTF-8;name="invite.ics";method=REQUEST')
->setBody($ical)
->setDisposition('inline;filename=invite.ics');
$message = new \Swift_Message();
$message->setTo(array('aaa@aaa.com'));
$message->setFrom('bbb@bbb.co');
$message->setSubject('Hello');
$message->attach($attachment);
try {
$response = $mailer->send($message);
print_r($response);
} catch(\Swift_TransportException $e) {
print_r('Bad username / password');
}
?>
</body>
</html>
发生的事情是它正在发送带有 ics 附件的电子邮件,但 gmail 和 outlook 无法识别它是日历邀请。你能帮帮我吗?
我用这个 link 作为参考: ics file not recognized by outlook
我立即看到的一些问题:
- 您没有指定
text/calendar
内容类型。 - 您在 content-type header 和其他地方使用了错误的引号。 (
”
而不是"
)。 - 您正在嵌入 triple-newlines (
\n\r\n
),因为您同时拥有 真实 换行符和\r\n
.
这可能无法解决问题,但这是一个起点。我建议仔细查看您发送的电子邮件的来源,并将其与正常工作的 iMip 邀请进行比较。我想这不是唯一的问题。