gpt4 book ai didi

php - ics 文件描述中的 html 与 php

转载 作者:太空狗 更新时间:2023-10-29 16:06:07 25 4
gpt4 key购买 nike

我正在编写一个脚本,涉及到达邮件服务器、获取电子邮件、从电子邮件中解析信息、从解析的信息中创建事件(ics 文件),然后将事件邀请连同原始电子邮件作为 ics 文件的描述发送。我正在用 php 完成上述所有工作。我停留在最后一步,即发送原始电子邮件正文 (html) 作为描述。

我开始明白 ics 文件字段 DESCRIPTION 不适合换行符(发送多行描述我必须使用\n)。所以在提取电子邮件正文后,我删除了所有的“\r\n”和我在没有换行符的字符串中获取 html 代码。

经过研究,我发现要解析 ics 文件中的 html,Outlook 使用类似 X-ALT-DESC 的东西。因此,我将 DESCRIPTION 和 X-ALT-DESC 都保留为带有 h​​tml 代码的字符串。但是发送电子邮件会导致 Outlook 忽略大部分 html,并在最后自行结束标记,我只收到原始电子邮件的一小部分。

为了找到问题所在,我将相同的邮件发送到 gmail,然后下载了 ics 文件。经检查,我发现 gmail 没有以任何方式更改 DESC,但会自动添加某些换行符。我观察到 outlook 在第一个换行符后忽略了 html,并在开头添加了自己的标签来完成 html 以及它自己的 Microsoft Exchange 内容。

我不知道问题出在 php(用于添加换行符)还是如果 ics 文件在 X-ALT-DESC 中有关于 html 代码长度的限制(即在 n 量代码之后添加自动换行符或其他东西)。感谢您提供的任何帮助,我想透露一下,在开始使用此脚本之前,我没有使用 php 的经验。

用于提取消息 (HTML) 并将其放入没有换行符的字符串的代码:

$infoxo = quoted_printable_decode(imap_fetchbody($imap,$email_id,"1"));
emailyy = str_replace(array("\r\n"),"\n",$infoxo);
$lines = explode("\n",$emailyy);
$new_lines =array();
foreach($lines as $i => $line)
{
if(!empty($line))
$new_lines[]=trim($line);
$emailzz = implode($new_lines);
}

$desc = $emailzz;

在另一个函数中(ICS 文件的代码):

$headers = 'Content-Type:text/calendar; Content-Disposition: inline;
charset=utf-8;\r\n';
$headers .= "Content-Type: /text/plain;charset=\"utf-8\"\r\n";

$message = "BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//BLAH/BLAH
METHOD:REQUEST
BEGIN:VEVENT
UID:" . md5(uniqid(mt_rand(), true)) . "example.com
DTSTAMP:" . gmdate('Ymd').'T'. gmdate('His') . "Z
DTSTART:".$start1."00Z
DTEND:".$end1."00Z
DESCRIPTION:".$desc."
SUMMARY:".$subject."
ORGANIZER;CN=".$organizer.":mailto:".$organizer_email."
LOCATION:".$location."
X-ALT-DESC;FMTTYPE=text/html:".$desc."
ATTENDEE;CUTYPE=INDIVIDUAL;ROLE=REQ-PARTICIPANT;PARTSTAT=NEEDS-
ACTION;RSVP=TRUE;CN".$participant_name_1.";X-NUM-GUESTS=0:MAILTO:".$participant_email_1."
END:VEVENT
END:VCALENDAR";
$headers .= $message;

然后我使用 phpamiler() 发送电子邮件

最佳答案

感谢arnaudq指导我正确的方向。这是用于折叠线的代码:

function abc($htmlMsg)
{
$temp = str_replace(array("\r\n"),"\n",$htmlMsg);
$lines = explode("\n",$temp);
$new_lines =array();
foreach($lines as $i => $line)
{
if(!empty($line))
$new_lines[]=trim($line);
}
$desc = implode("\r\n ",$new_lines);
return $desc;
}

在我使用的 icalender 文件中:

DESCRIPTION:".$desc."
X-ALT-DESC;FMTTYPE=text/html:".$desc."

icalender 文件中的其余参数与我的问题中的参数相同。

请注意,以上仅在 Outlook 中进行了测试。它在描述中显示为干净的事件和正确的 HTML 格式。

关于php - ics 文件描述中的 html 与 php,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31982680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com