# E-Mail-Kollector Fehler Suche

**URL:** <https://forum.dolibarr.de/forum/t/e-mail-kollector-fehler-suche/9599>\
**Category:** Dolibarr installieren\
**Created:** [18. November 2024 um 07:52 UTC](https://forum.dolibarr.de/forum/t/e-mail-kollector-fehler-suche/9599 "2024-11-18T07:52:47Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![Plows](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/p/c5a1d2/32.png) [@Plows](https://forum.dolibarr.de/forum/u/Plows)\
**Post date:** [18. November 2024 um 07:52 UTC](https://forum.dolibarr.de/forum/t/e-mail-kollector-fehler-suche/9599/1 "2024-11-18T07:52:47Z")

</div>

Hallo,  
ich nutze derzeit die Version 20.0.2 und bin Total zufrieden mit dem derzeitigen Stand, seit längerem bemühe ich mich aber um ein Problem mit dem E-Mail-Kollector, dieser will mit dem aktivierten PHP-IMAP Bibliothek, angehängten Dokumente bei der erstellung von Neuen Tickets nicht Speichern, sobald das Ticket aber einmal angelegt wurde dann werden die Anhänge gespeichert, also

**Collect\_Ticket\_Request**  
Keine Anhänge

**Collect\_Response\_In**  
ganz normal mit Anhänge

Ich habe mir mal die „emailcollector\_card.php“ angeschaut, gefühlt 100 mal hoch und runter und sehe den Baum vor lauter Wald nicht 🙈

Ich wollte den Code prüfen wo der Anhang gespeichert wird und vermute den Fehler in Zeile 3930, denn dort meldet er einen Fehler unter meiner Test installation Doliwamp, dass er eine Datei oder Verzeichnis nicht finden kann, wobei der Ordner angelegt wird

3930  
file\_put\_contents($destdir.‚/‘.$filename, $content);

Der Kollektor wirft als Protokoll folgendes aus

```auto
> doCollectOneCollector is using method MAIN_IMAP_USE_PHPIMAP=1, access_type=1 (OAUTH2)
> Refresh token Microsoft-Alpha
> IMAP search array used : array (\n 0 => \n array (\n 0 => 'UNDELETED',\n ),\n 1 => \n array (\n 'SINCE' => '18-Nov-2024',\n ),\n)
> Then search string into email header : ! /References.*@55fcf57ffafe96a10e393476667d1f1f12d9aa47/
> ** Process email #1 - MsgId: cd7e4540678842ef8f9c313ba6e75f54@dw-in.de - Date: Mon, 18 Nov 2024 07:30:19 +0000 - References: NotFound - Subject: TEST Ordner
> * Process operation recordevent
> Email will have actioncode=EMAIL
> We did not find existing actionmail with msgid=cd7e4540678842ef8f9c313ba6e75f54@tt-in.de
> Event created -> id=44430
> * Process operation ticket
> Email will have actioncode=EMAIL
> Ticket not found using trackid= or msgid=cd7e4540678842ef8f9c313ba6e75f54@tt-in.de
> Ticket created with attachments -> id=1576
> Move mail 4331 - cd7e4540678842ef8f9c313ba6e75f54@tt-in.de - TEST Ordner to Archiv
> move email 4331
> Expunge

```

Ich habe das ganze mit einem Mail Konto von Office 365 (oauth2) getestet und mit Gmail IMAP, beide das gleiche, ich gehe auch nicht von einem Mail Problem aus, da ja der Response\_IN einwandfrei funktioniert.

Vieleicht ist ja ein PHP Guru unter uns der Erfahrener ist und Lust hat den Fehler mit mir zu finden.

lg  
Jason

---

<div class="post-metadata">

**Author:** ![DG-rilling](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/d/e495f1/32.png) [@DG-rilling](https://forum.dolibarr.de/forum/u/DG-rilling)\
**Post date:** [20. November 2024 um 10:59 UTC](https://forum.dolibarr.de/forum/t/e-mail-kollector-fehler-suche/9599/2 "2024-11-20T10:59:50Z")

</div>

Hallo,  
wir benützen den Email-Kollektor nicht, aber beim Lesen ist mir aufgefallen das die „msgid“ zwar den gleichen Prefix `cd7e4540678842ef8f9c313ba6e75f54@....` aber der Suffix

1. einmal „[...@dw-in.de](mailto:...@dw-in.de)“ ist
2. und dann weiter unten auf „[...@tt-in.de](mailto:...@tt-in.de)“ wechselt

Vielleicht hilft das weiter…

---

<div class="post-metadata">

**Author:** ![Plows](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/p/c5a1d2/32.png) [@Plows](https://forum.dolibarr.de/forum/u/Plows)\
**Post date:** [20. November 2024 um 12:34 UTC](https://forum.dolibarr.de/forum/t/e-mail-kollector-fehler-suche/9599/3 "2024-11-20T12:34:45Z")

</div>

Da hab ich einen Fehler gemacht, ich wollte @dw-in.de in @tt-in.de ändern und hab wohl einen eintrag übersehen 🙈

---

<div class="post-metadata">

**Author:** ![Plows](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/p/c5a1d2/32.png) [@Plows](https://forum.dolibarr.de/forum/u/Plows)\
**Post date:** [20. November 2024 um 20:05 UTC](https://forum.dolibarr.de/forum/t/e-mail-kollector-fehler-suche/9599/4 "2024-11-20T20:05:44Z")

</div>

Heute war wieder Zeit zum Probieren, ich habe im emailcollector.class.php in der Zeile 3941 folgende Zeile Testweise angepasst

alt  
file\_put\_contents($destdir.‚/‘.$filename, $content);

neu  
file\_put\_contents($destdir.‚/‘.‚Image\_test.jpg‘, $content);

Damit Speichert er jetzt 1 Anhang.  
Der Fehler muss im $filename liegen.

Eine Warung bekomme ich aber noch  
**Warning** : md5\_file(c:/dolibarr/dolibarr\_documents/ticket/TS2411-0038/): failed to open stream: No such file or directory in **C:\dolibarr\www\dolibarr\htdocs\core\lib\files.lib.php** on line **2130**

$ecmfile-\>label = md5\_file(dol\_osencode($dir.‚/‘.$file)); // MD5 of file content

---

<div class="post-metadata">

**Author:** ![DG-rilling](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/d/e495f1/32.png) [@DG-rilling](https://forum.dolibarr.de/forum/u/DG-rilling)\
**Post date:** [22. November 2024 um 10:29 UTC](https://forum.dolibarr.de/forum/t/e-mail-kollector-fehler-suche/9599/5 "2024-11-22T10:29:23Z")

</div>

Ich tippe dann mal auf ein ungültiges Zeichen im Filename.  
Das kriegste aber leicht raus indem Du dir den Inhalt von $filename vor dem `file_put_contents($destdir.‚/‘.$filename, $content);` anzeigen lässt.

Oder den $filename bzw. mit dem Verzeichnis mal testweise in `'` `'` setzt:

```auto
		file_put_contents("'".$destdir."/".$filename."'", $content);

```

---

<div class="post-metadata">

**Author:** ![Plows](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/p/c5a1d2/32.png) [@Plows](https://forum.dolibarr.de/forum/u/Plows)\
**Post date:** [22. November 2024 um 11:02 UTC](https://forum.dolibarr.de/forum/t/e-mail-kollector-fehler-suche/9599/6 "2024-11-22T11:02:24Z")

</div>

Hallo,  
das habe ich mir auch gedacht, ich frage mich wie ich im E-MailCollector mir den Inhalt von $filename anzeigen lassen kann?

PS

> ```
> $dateiname = "c:\Dolibarr\Test.txt";
> $datei = fopen($dateiname, "w");
> fwrite($datei,$filename);
> fclose($datei);
> 
> ```

Die Datei ist leer, das ist der Fehler, $destdir passt, da bekomme ich

c:/dolibarr/dolibarr\_documents/ticket/TS2411-0041

und beim $content natürlich auch daten.

---

<div class="post-metadata">

**Author:** ![DG-rilling](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/d/e495f1/32.png) [@DG-rilling](https://forum.dolibarr.de/forum/u/DG-rilling)\
**Post date:** [22. November 2024 um 13:28 UTC](https://forum.dolibarr.de/forum/t/e-mail-kollector-fehler-suche/9599/7 "2024-11-22T13:28:16Z")

</div>

Wenn der $filename leer ist dann würde ich immer eine Stelle/Funktion vorher schauen.  
(an jeder Stelle kannst Du ja ein var\_dump($xxxx) einfügen)

Hier z.B.: schauen was der var\_dump($attachments) anzeigt:

```auto
	if ($imapemail->hasAttachments()) {
		$attachments = $imapemail->getAttachments()->all();
	    var_dump($attachments);

```

hier wird der Filename aus dem attachment extrahiert.

```auto
	$filename = $attachment->getFilename();
	$content = $attachment->getContent();
	$this->saveAttachment($destdir, $filename, $content);

```

---

<div class="post-metadata">

**Author:** ![Plows](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/p/c5a1d2/32.png) [@Plows](https://forum.dolibarr.de/forum/u/Plows)\
**Post date:** [22. November 2024 um 22:01 UTC](https://forum.dolibarr.de/forum/t/e-mail-kollector-fehler-suche/9599/8 "2024-11-22T22:01:44Z")

</div>

Komme der sache immer näher, es gibt ein Problem mit getFilename,

wenn ich statt

> $filename = $attachment-\> **getFilename** ();

NEU

> $filename = $attachment-\> **getname** ();

dann werden die Anhänge gespeichert.

in Version 20.0.2 läuft es nun Fehlerfrei

Es gab auch in der Zeile 3792 einen Hinweis

> // filename may be given as ‚Filename‘ or ‚Name‘ or both  
> $filename = $params[‚filename‘] ?? $params[‚name‘];

Ich denke das wir den Fehler behoben haben, vielleicht können wir das in Github mitteilen.

---

<div class="post-metadata">

**Author:** ![DG-rilling](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/d/e495f1/32.png) [@DG-rilling](https://forum.dolibarr.de/forum/u/DG-rilling)\
**Post date:** [23. November 2024 um 14:12 UTC](https://forum.dolibarr.de/forum/t/e-mail-kollector-fehler-suche/9599/9 "2024-11-23T14:12:17Z")

</div>

Schön, aber die Funktion `$filename = $attachment->getname();` finde ich bei mir nicht.

Ich finde für `function getFilename();` die folgenden 4 Files im ganzen Dolibarr-Baum:

 ![grafik](https://forum.dolibarr.de/forum/uploads/dolibarrde/original/2X/3/3a91f86e8b40d81f9315846adfbee497364d179f.png)  
wobei die in der letzten Zeile wohl original verwendet wird.

Zeige doch mal das Array `$attachments` vor  
 → `foreach ($attachments as $attachment) {`  
mittels var\_dump($attachments) an.  
Vielleicht lässt sich ja daraus etwas näheres ermitteln.

```auto
		'@phan-var-force array{filename?:string,name?:string,charset?:string} $params';

		// ATTACHMENT
		// Any part with a filename is an attachment,
		// so an attached text file (type 0) is not mistaken as the message.
		if (!empty($params['filename']) || !empty($params['name'])) {
			// filename may be given as 'Filename' or 'Name' or both
			$filename = $params['filename'] ?? $params['name'];

```

Das hat mit dem Fehler imho nichts zu tun, denn der „??“ Operator sagt nur nimm den ersten Parameter `$params['filename']` wenn vorhanden und nicht Null, ansonsten nimm den zweiten Parameter `$params['name']`.

---

<div class="post-metadata">

**Author:** ![Plows](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/p/c5a1d2/32.png) [@Plows](https://forum.dolibarr.de/forum/u/Plows)\
**Post date:** [23. November 2024 um 16:08 UTC](https://forum.dolibarr.de/forum/t/e-mail-kollector-fehler-suche/9599/10 "2024-11-23T16:08:36Z")

</div>

Hallo,  
$filename war ohne inhalt, erst wo ich von

> getfilename

auf

> getname

umgestellt habe war die variable $filename mit den richtigen Daten.

Der inhalt von Attachment ist zu groß wie kann ich Dir den zukommen lassen?

---

<div class="post-metadata">

**Author:** ![Plows](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/p/c5a1d2/32.png) [@Plows](https://forum.dolibarr.de/forum/u/Plows)\
**Post date:** [23. November 2024 um 18:05 UTC](https://forum.dolibarr.de/forum/t/e-mail-kollector-fehler-suche/9599/11 "2024-11-23T18:05:36Z")

</div>

Hallo,  
ich hab jetzt auch mal nach der „public function getname()“ gesucht, sowohl in meiner Doliwamp 20.0.1 als auch in meiner Ubuntu 20.0.2 ist diese in mehrere Dateien vorhanden.  
Wenn ich von GitHub den emailcollector.class.php (develop) lade, dann finde ich auch dort etlich getName() einträge.

Durch Deine erklärungen verstehe ich immer mehr von PHP, ich habe meine Korrektur angepasst

> if (getDolGlobalString(‚MAIN\_IMAP\_USE\_PHPIMAP‘)) {  
> //var\_dump($attachments);  
> foreach ($attachments as $attachment) {  
> // $attachment-\>save($destdir.‚/‘);  
> $typeattachment = (string) $attachment-\>getDisposition();  
> **$filename = $attachment-\>getFilename() ?? $attachment-\>getName();**  
> $content = $attachment-\>getContent();  
> $this-\>saveAttachment($destdir, $filename, $content);
> 
> }  
> } else {  
> $this-\>getmsg($connection, $imapemail, $destdir);  
> }

 ![image](https://forum.dolibarr.de/forum/uploads/dolibarrde/original/2X/3/34a92170f4c5aa36e86346e4c7d23b2902813510.png)

---

<div class="post-metadata">

**Author:** ![DG-rilling](https://forum.dolibarr.de/forum/letter_avatar_proxy/v4/letter/d/e495f1/32.png) [@DG-rilling](https://forum.dolibarr.de/forum/u/DG-rilling)\
**Post date:** [23. November 2024 um 18:59 UTC](https://forum.dolibarr.de/forum/t/e-mail-kollector-fehler-suche/9599/12 "2024-11-23T18:59:20Z")

</div>

Oooh, ich vergaß das in PHP die Funktions- und Classnamen nicht **case-sensitive** sind, dagegen die Variablen- und Kontantennamen schon. 🤔  
Ich habe mein Suchtool aber per default immer auf **case sensitive** eingestellt.

Interessant zu wissen wäre welche getName()-Funktion nun wirklich benützt wird…  
Wie lautet denn bei Dir der Filename des Anhangs?

Wenn ich mir eine eMail mit Anhang ansehe dann sieht das im Quelltext ungefähr so aus:

 ![grafik](https://forum.dolibarr.de/forum/uploads/dolibarrde/original/2X/b/b2049c095606f91db919fd02a85f77b6467ca48b.png)

d.h. bei Dir dürfte dann das Feld „filename=“ also leer sein.
