![](/img/trans.png)
[英]Does anyone know where I can find a simple version of the A* algorithm in php?
[英]Does anyone know how I can read emails in PHP and then write them to a database?
我現在正在實習,我應該從上面實施問題。 在谷歌上我找不到合適的東西。 我需要幫助讀取電子郵件(在 Imap 的幫助下),然后寫入數據庫 (mysql)。 不幸的是,我不知道該怎么做,所以我求助於你。 提前致謝。
我不知道這是如何工作的,我不知道從哪里開始。 我很高興能得到幫助!
這是一次嘗試:
<?php
// POP3-Server
$host="xxx";
$port=" 993";
// User-Daten
$user="xxx";
$passwort="xxx";
// Verbinden zur Mailbox
$mailbox=imap_open("{".$host."/imap: 993}INBOX",$user,$passwort);
// Überprüfen ob Verbindung erfolgreich
if ($mailbox)
{
// Posteingang überprüfen
$check=imap_check($mailbox);
// Anzahl vorhandener Emails im Postfach
$count_msg=$check->Nmsgs;
// Anzahl neuer Emails im Postfach
$count_new_msg=$check->Recent;
// Emails auslesen
for ($i=1; $i<=imap_num_msg($mailbox);
$i++)
{
// Header erfassen
$mail_header=imap_header($mailbox, $i);
// Datum erfassen
$mail_date=$mail_header->Date;
// Mail-ID erfassen
$mail_id=$mail_header->message_id;
// Empfänger erfassen
$mail_to=$mail_header->toaddress;
// Absendername erfassen
$mail_from_name=$mail_header->from [0]->personal;
// Absender-eMail-Adresse erfassen
$mail_from_address=$mail_header->from [0]->mailbox."@".$mail_header->from [0]->host;
// Kopieempfänger erfassen
$mail_copy_to=$mail_header->cc[0] ->mailbox."@".$mail_header->cc[0] ->host;
// Antwortempfänger erfassen
$mail_answer_to=$mail_header->reply_to;
// Betreff erfassen
$mail_subject=$mail_header->subject;
// Nachricht erfassen
$mail_body = imap_body($mailbox,$i);
// Daten in db speichern
include ("config.inc.php");
$eintrag = "INSERT INTO bsi_statistik (komponente, anzahlmeldungen, datumletztemeldung, mailsin30tagen) VALUES ('$komponente', '$mail_from_address', '$mail_subject', '$mail_date', '$mail_body')";
$eintragen = mysql_query($eintrag);
echo "e-Mail Nr.".$i."<br>";
// Ausgabe in HTML
echo '<b>Versendet am:</b> ';
echo $mail_date."<br>";
echo '<b>Eindeutige eMail-ID: </b>';
echo $mail_id."<br>";
echo '<b>Empfänger: </b>';
echo $mail_to."<br>";
echo '<b>"Name des Absenders: </b>';
echo $komponente."<br>";
echo '<b>"eMail des Absenders: </b>';
echo $mail_from_address."<br>";
// echo $mail_from_address."<br>";
echo '<b>Betreff: </b>';
echo $mail_subject."<br><br>";
echo '<b>Nachricht: </b>';
echo $mail_body."<br><br>";
// E-Mail löschen löschen
imap_delete($mailbox, $i);
}
imap_expunge($mailbox);
imap_close($mailbox);
}
?>
使用 OP 提供的附加信息中的示例進行了更新
實現此目的的最簡單方法是執行以下操作。 此示例使用以下數據庫架構:
create table incoming_emails
(
id int auto_increment,
date_sent datetime null,
headers json null,
`from` varchar(191) null,
subject text null,
content longtext null,
constraint incoming_emails_pk
primary key (id)
);
使用 Composer 導入新庫laminas/mail
:
composer install laminas/mail
這樣做之后,可以像這樣檢索和迭代郵件:
<?php
use Laminas\Mail\Storage\Imap;
require_once 'vendor/autoload.php';
// Connecting with Imap:
$mail = new Imap([
'host' => 'example.com',
'user' => 'test',
'password' => 'test',
]);
echo $mail->countMessages() . " messages found\n";
foreach ($mail as $message) {
printf("Mail from '%s': %s\n", $message->from, $message->subject);
}
然后,您可以使用 MySQLi class 持久化到數據庫:
<?php
use Laminas\Mail\Storage\Imap;
require_once 'vendor/autoload.php';
// Do all configuration here.
// Database:
$dbHost = 'localhost';
$dbUsername = 'root';
$dbPassword = 'RANDOM_PASSWORD';
$dbName = 'my_database';
// Email inbox to query:
$emailHost = 'localhost';
$emailPort = 995;
$emailUsername = 'email@example.com';
$emailPassword = 'SECRET_STRING_HERE';
// Do not edit below this line.
$mysqli = new MySQLi($dbHost, $dbUsername, $dbPassword, $dbName);
// If cannot connect to MySQL database, throw an error.
if ($mysqli->connect_error) {
throw new \Exception('Could not connect to database!');
}
// Connecting with Imap:
$mail = new Imap([
'host' => $emailHost,
'user' => $emailUsername,
'password' => $emailPassword,
'port' => $emailPort,
]);
echo $mail->countMessages() . " messages found\n";
// Prepare a query.
$query = 'INSERT INTO `incoming_emails` (`date_sent`, `headers`, `from`, `subject`, `content`)';
// Prepare all emails for input to SQL database.
$mailParser = new MailMimeParser();
foreach ($mail as $message) {
$queryData[] = [
'from' => $mysqli->real_escape_string($message->getHeader('reply-to') ?? $message->getHeader('from')),
'headers' => $mysqli->real_escape_string(json_encode($message->getHeaders())),
'subject' => $mysqli->real_escape_string($message->getSubject()),
'content' => $mysqli->real_escape_string($message->getContent()),
];
// Left in for debug:
printf("Mail from '%s': %s\n", $message->from, $message->subject);
}
$query .= 'VALUES (' . implode('), (', $queryData) . ')';
$mysqli->query($query);
echo 'Done';
請確保您還包括良好的數據庫輸入清理。
這是按原樣提供的,沒有進行任何測試,因此無法確認其是否可以正常工作。 您可能需要根據自己的需要對其進行更新,並且僅作為教育示例提供。
文檔:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.