我的项目的想法是使用IMAP从Gmail检索电子邮件并将其存储在数据库中 比使用PHPMailer发送新消息。 我的问题是如何回复我的数据库中存在的电子邮件,以及回复电子邮件需要哪些信息。 这是我用来发送电子邮件的代码。但我无法回复电子邮件。当我想回复电子邮件时,我发现我只是发送新邮件。 这只是模型
public function send_email_reply($from, $to, $subject, $message)
{
$body =
'<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>'.htmlspecialchars($subject, ENT_QUOTES, $this->email->charset).'</title>
<style type="text/css">
body {
font-family: Arial, Verdana, Helvetica, sans-serif;
font-size: 16px;
}
</style>
</head>
<body>
'.$message.'
</body>
</html>';
$body = $this->email->full_html($subject, $message);
$result = $this->email
->from($from)
->to($to)
->subject($subject)
->message($body)
->send();
return $result;
}
答案 0 :(得分:0)
当电子邮件客户端回复邮件时,它实际上是一条新邮件。但是,该消息看起来像一个回复,并且会与原始消息相关联,因为生成回复的邮件客户端会仔细构建。
要使其看起来,就像回复一样,原始邮件的文本通常包含在每行前面的竖线中。对于消息的纯文本部分,每行前面都有一个尖括号,这并不太难。对于HTML部分,客户端必须构造能够正确呈现的内容,这可能非常困难。
从您的代码示例中,我无法说明您是如何构建消息的,但它可能没有考虑这些因素。您将需要分析原始消息的MIME结构,获取TEXT / PLAIN部分并构建正确的TEXT / PLAIN回复,然后您需要对TEXT / HTML部分执行相同操作。一旦你有了正确结构化的部分,你需要用你的TEXT / PLAIN和TEXT / HTML部分构建一个新的MIME消息。
有几个PHP MIME解析器,我没有特定的推荐,我们实际上根据需要使用了几个,包括我们在内部编写的。 php-mime-mail-parser非常好。
要使您的消息行为像回复一样,您需要正确放入几个标题。获取原始邮件的Message-ID,并将其放在新邮件的In-Reply-To:
标题中。从原始邮件中获取References:
标头,并将原始Message-ID附加到列表的末尾,使用单个空格分隔不同的Message-ID。如果之前不存在,请使用原始Message-ID创建一个新的。
如果References:
标头变长,您可能希望截断条目。我不知道具体的限制,在我们的实施中,我们没有施加任何限制。只是为了确保fold行不超过998个字符。
回复的In-Reply-To:
和References:
标题在RFC 5322 sec 3.6.4中指定。
有关线程如何工作的详细讨论,请参阅Jamie Zawinski's work on email threading,它对我们的电子披露工具的电子邮件线程分析非常有用。它已过时,但仍然相关。