gpt4 book ai didi

php - 如何将干净的电子邮件内容从服务器获取到数据库中

转载 作者:行者123 更新时间:2023-11-29 22:47:56 25 4
gpt4 key购买 nike

我正在提取发送到某个地址的所有新收到的电子邮件,并使用以下脚本将它们保存到我的数据库中。

#!/usr/bin/php -q
<?php
// Config
date_default_timezone_get('Africa/Nairobi');
$dbuser = "USERNAME";
$dbpass = "PASSWORD";
$dbname = "DATABASE";
$dbhost = 'localhost';
$notify= 'user@example.com'; // an email address required in case of errors

// read from stdin
$fd = fopen("php://stdin", "r");
$email = "";
while (!feof($fd)) {
$email .= fread($fd, 1024);
}
fclose($fd);
// handle email
$lines = explode("\n", $email);

// empty vars
$from = "";
$subject = "";
$headers = "";
$message = "";
$splittingheaders = true;
for ($i=0; $i < count($lines); $i++) {
if ($splittingheaders) {
// this is a header
$headers .= $lines[$i]."\n";

// look out for special headers
if (preg_match("/^Subject: (.*)/", $lines[$i], $matches)) {
$subject = $matches[1];
}
if (preg_match("/^From: (.*)/", $lines[$i], $matches)) {
$from = $matches[1];
}
if (preg_match("/^To: (.*)/", $lines[$i], $matches)) {
$to = $matches[1];
}
} else {
// not a header, but message
$message .= $lines[$i]."\n";
}

if (trim($lines[$i])=="") {
// empty line, header section has ended
$splittingheaders = false;
}
}

if ($conn = @mysql_connect($dbhost,$dbuser,$dbpass)) {
if(!@mysql_select_db($dbname,$conn))
mail($email,'Email Logger Error',"There was an error selecting the email logger database.\n\n".mysql_error());
$from = mysql_real_escape_string($from);
$to = mysql_real_escape_string($to);
$subject = mysql_real_escape_string($subject);
$headers = mysql_real_escape_string($headers);
$message = mysql_real_escape_string($message);

/*$string = explode("UTF-8", $message);

$string = $string[2];

$string = explode("--", $string);

$message = $string[0];*/

$email = mysql_real_escape_string($email);
$result = @mysql_query("INSERT INTO email_log (`to`,`from`,`subject`,`headers`,`message`,`source`) VALUES('$to','$from','$subject','$headers','$message','$email')");
if (mysql_affected_rows() == 0)
mail($notify,'Email Logger Error',"There was an error inserting into the email logger database.\n\n".mysql_error());
} else {
mail($notify,'Email Logger Error',"There was an error connecting the email logger database.\n\n".mysql_error());
}
?>

但我有一个问题。正文部分将大量不必要的内容保存到我的数据库中。

例如,我发送“Hello World”一词,我得到以下结果

--001a113f9a3abed08b051116a161
Content-Type: text/plain; charset=UTF-8

Hello World

--001a113f9a3abed08b051116a161
Content-Type: text/html; charset=UTF-8

<div dir="ltr">Hello World</div>

--001a113f9a3abed08b051116a161--

如何过滤其他内容并仅保留“Hello World”,或者是否有更好的 PHP 脚本来管道电子邮件?

最佳答案

您拥有的是多部分 MIME 消息,其中可能包含其他部分,例如附件。您通常会将其分成几部分,并根据其内容类型和编码来解析每个部分。然后,您通常可以使用第一个文本/纯文本部分作为纯文本消息,或者如果邮件不包含文本/纯文本部分,您可以使用第一个文本/纯文本部分,从中剥离 HTML 标记。

不幸的是,我没有从头开始执行此操作的代码(因为您正在从 stdin 读取),但如果您想使用 IMAP/POP3 直接从 PHP 获取邮件,这段代码一直运行良好对我来说一段时间:http://php.net/manual/en/function.imap-fetchstructure.php#85486 。如果您可以替换将消息分解为多个部分的 fetchstruct 功能,您也许能够根据您的需要进行调整。

关于php - 如何将干净的电子邮件内容从服务器获取到数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29012257/

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