Det er ikke noget man lige laver på 20 minutter.
Har du spurgt afsenderen om det er muligt at få i et andet format?
php.net har nogle gode eksempler på hvordan man åbner en mailbox via f.eks. imap og så henter listen over emails. Hedder mailen det samme hver gang, er det jo bare at gå listen igennem. Se her funktionen
imap_headers() Som ronols siger kan du sikkert google dig frem til en løsning der også downloader en attachment fra mailen.
Med hensyn til håndtering af excel-filen anvendte jeg for nogle år tilbage projektet "Spreadsheet_Excel_Reader", selvom jeg dog ikke ved om det stadigvæk eksisterer. Men det var i hvert fald uhyre simpelt at anvende efter at have læst deres introduktion.
dropper du et svar, for takke være dine søge tip fik jeg bakset dette sammen (så skal der bare finpudses):
<?php
require_once 'excel_reader2.php';
$server = '{mail.****.****/pop3:110}';
// and put your login and password here
$login = '****';
$password = '****';
$connection = imap_open($server, $login, $password);
// the number in constructor is the message number
$emailMessage = new EmailMessage($connection, 1);
// set to true to get the message parts (or don't set to false, the default is true)
$emailMessage->getAttachments = true;
$emailMessage->fetch();
//could drop file_put, but want to keep org. spreadsheet and want to add more to $data after
file_put_contents('el.xls', $emailMessage->attachments[0]['data']);
$data = new Spreadsheet_Excel_Reader("el.xls");
echo $data->dump(true,true);
imap_close($connection);
exit;
class EmailMessage {
protected $connection;
protected $messageNumber;
public $bodyHTML = '';
public $bodyPlain = '';
public $attachments;
public $getAttachments = true;
public function __construct($connection, $messageNumber) {
$this->connection = $connection;
$this->messageNumber = $messageNumber;
}
public function fetch() {
$structure = @imap_fetchstructure($this->connection, $this->messageNumber);
if(!$structure) {
return false;
}
else {
$this->recurse($structure->parts);
return true;
}
}
public function recurse($messageParts, $prefix = '', $index = 1, $fullPrefix = true) {
foreach($messageParts as $part) {
$partNumber = $prefix . $index;
if($part->type == 0) {
if($part->subtype == 'PLAIN') {
$this->bodyPlain .= $this->getPart($partNumber, $part->encoding);
}
else {
$this->bodyHTML .= $this->getPart($partNumber, $part->encoding);
}
}
elseif($part->type == 2) {
$msg = new EmailMessage($this->connection, $this->messageNumber);
$msg->getAttachments = $this->getAttachments;
$msg->recurse($part->parts, $partNumber.'.', 0, false);
$this->attachments[] = array(
'type' => $part->type,
'subtype' => $part->subtype,
'filename' => '',
'data' => $msg,
'inline' => false,
);
}
elseif(isset($part->parts)) {
if($fullPrefix) {
$this->recurse($part->parts, $prefix.$index.'.');
}
else {
$this->recurse($part->parts, $prefix);
}
}
elseif($part->type > 2) {
if(isset($part->id)) {
$id = str_replace(array('<', '>'), '', $part->id);
$this->attachments[$id] = array(
'type' => $part->type,
'subtype' => $part->subtype,
'filename' => $this->getFilenameFromPart($part),
'data' => $this->getAttachments ? $this->getPart($partNumber, $part->encoding) : '',
'inline' => true,
);
}
else {
$this->attachments[] = array(
'type' => $part->type,
'subtype' => $part->subtype,
'filename' => $this->getFilenameFromPart($part),
'data' => $this->getAttachments ? $this->getPart($partNumber, $part->encoding) : '',
'inline' => false,
);
}
}
$index++;
}
}
function getPart($partNumber, $encoding) {
$data = imap_fetchbody($this->connection, $this->messageNumber, $partNumber);
switch($encoding) {
case 0: return $data; // 7BIT
case 1: return $data; // 8BIT
case 2: return $data; // BINARY
case 3: return base64_decode($data); // BASE64
case 4: return quoted_printable_decode($data); // QUOTED_PRINTABLE
case 5: return $data; // OTHER
}
}
function getFilenameFromPart($part) {
$filename = '';
if($part->ifdparameters) {
foreach($part->dparameters as $object) {
if(strtolower($object->attribute) == 'filename') {
$filename = $object->value;
}
}
}
if(!$filename && $part->ifparameters) {
foreach($part->parameters as $object) {
if(strtolower($object->attribute) == 'name') {
$filename = $object->value;
}
}
}
return $filename;
}
}