Eine der am häufigsten verwendeten Funktionen von TeamworkPM ist die Möglichkeit, auf E-Mail-Benachrichtigungen zu antworten und Ihren Kommentar zu Ihrem Projekt hinzuzufügen. Anhänge, die Sie über die E-Mail-Antwort senden, werden ebenfalls zum Kommentar hinzugefügt und auf der Registerkarte "Dateien" Ihres Projekts angezeigt. Einer meiner Kernbereiche im Entwicklungsteam ist die E-Mail-Verarbeitung. Wenn E-Mails an Teamwork gesendet werden, bin ich der Typ, der dafür sorgt, dass alles funktioniert. Da E-Mail die Kommunikationsmethode ist, gibt es viele „Probleme“, die von unserer Seite angegangen werden müssen. Dazu gehören das Behandeln von Text- / HTML-E-Mails, das Analysieren des Antwortbits und das Verwerfen des zitierten Inhalts aus der ursprünglichen Benachrichtigung, das Überprüfen des Benutzers, der die Antwort sendet, das Speichern der Anhänge usw. In diesem Artikel hielt ich es für interessant, mich auf eine der Herausforderungen beim Umgang mit E-Mail-Anhängen und die von uns implementierte Lösung zu konzentrieren: Signaturbilder.

Einige Hintergrundinformationen

Als wir Teamwork zum ersten Mal starteten, waren E-Mail-Benachrichtigungen eine Möglichkeit. Sie konnten nur Benachrichtigungen erhalten, aber wir haben keine Antworten akzeptiert. Sie mussten sich bei Teamwork anmelden, um auf eine Nachricht oder einen Kommentar zu antworten. Menschen sind an E-Mails gewöhnt und erwarten, auf E-Mails antworten zu können. Wir haben die Möglichkeit hinzugefügt, auf E-Mail-Benachrichtigungen zu antworten und die Antwort als Kommentar oder Nachricht zu Ihrem Projekt hinzuzufügen. Damals konnten Sie einen Kommentar zu Teamwork hinzufügen, aber Sie konnten dem Kommentar keine Dateien hinzufügen. Aufgrund dieser Einschränkung haben wir bei der Verarbeitung der E-Mails alle Anhänge übersprungen. Im Verlauf von Teamwork haben wir die Möglichkeit hinzugefügt, Dateien an Kommentare in Teamwork anzuhängen. Dies bedeutete, dass wir jetzt auch Anhänge zu E-Mail-Antworten verarbeiten konnten. Fantastisch! Die Leute haben es geliebt ... Aber es trat ein neues Problem auf: Die Unterschriftenbilder der Leute wurden jetzt zum Kommentar hinzugefügt, und schlimmer noch, sie wurden zum Abschnitt "Dateien" hinzugefügt ... bei jeder Antwort. Das Feedback begann zu rollen.

Das Problem

Wenn eine E-Mail bei Teamwork eintrifft, erhalten wir eine Liste der angehängten Dateien. Einige sind echte Anhänge, andere sind Signaturbilder. Wir haben absolut keine Möglichkeit zu wissen, welche legitimen Anhänge und welche Teil einer Unterschrift sind. Wir haben Hunderte von E-Mails analysiert und konnten keine Standardmethode zur Unterscheidung der Anhänge finden. Es gab einige Dateinamen, die standardmäßig aussahen (z. B. image001.png), die wir einfach ignorieren konnten, aber dann stellten wir fest, dass in eine E-Mail eingefügte Bilder auch image001.png heißen konnten. Wir konnten diese nicht ignorieren, da sie ein wichtiger Screenshot sein könnten!

Die Lösung

Anfangs dachten wir, wir können nichts dagegen tun. Wir gehen davon aus, dass Benutzer jeden Tag E-Mails mit denselben Signaturbildern in Google Mail, Thunderbird, Outlook usw. erhalten, damit sie verstehen, wann die Signaturbilder auch in Teamwork mehrmals empfangen werden. Aber Teamwork ist anders. Die Registerkarte "Dateien" wurde mit diesen Signaturbildern überfüllt, und der Dateibereich wurde von diesen Bildern verwendet. Das Feedback kam dick und schwer. Es musste etwas getan werden. Ich hatte es satt, immer wieder auf dasselbe Feedback zu antworten… Und dann hatte ich eine Offenbarung. Was wäre, wenn wir einen "Fingerabdruck" jeder Bilddatei erhalten könnten, sodass wir unabhängig vom Namen der Datei wissen würden, dass es sich um dasselbe Bild handelt. Ich könnte eine Hash-Funktion verwenden, um den Fingerabdruck zu erhalten! Eine Hash-Funktion ist ein Algorithmus, der einen beliebigen Datenblock verwendet und eine Bitfolge fester Größe zurückgibt. Wenn Sie beispielsweise ein E-Book gehasht haben, indem Sie den Inhalt an die Funktion übergeben haben, erhalten Sie eine 32-stellige Zeichenfolge zurück. Wenn Sie 10 Mal dasselbe eBook gehasht haben, erhalten Sie immer dieselbe 32-Zeichen-Zeichenfolge zurück. Wenn Sie auch nur einen einzelnen Buchstaben im E-Book geändert und den Inhalt über die Funktion zurückgegeben haben, erhalten Sie eine völlig andere 32-stellige Zeichenfolge. Also habe ich ein bisschen getestet…. Ich habe einen Komponententest für eine neue Funktion erstellt, die den Inhalt der Binärdatei liest, in eine Zeichenfolge konvertiert und den Inhalt dann mit einem MD5-Hash hasht. Ich habe 3 Kopien desselben Bildes genommen, sie in file1.jpg, file2.jpg und file3.jpg umbenannt und jede durch meine Funktion ausgeführt, und es wurde dieselbe Zeichenfolge für den Fingerabdruck zurückgegeben. Anschließend habe ich meinen Komponententest so erweitert, dass er eine Verbindung zu einer POP-Mailbox herstellt, die Anhänge verarbeitet und den „Fingerabdruck“ jedes Anhangs generiert. Ich habe 3 E-Mails an diese POP-Box gesendet, von denen jede das gleiche Bild enthält, und es hat funktioniert! Alle 3 Fingerabdrücke des Anhangs stimmten überein. Ich habe einige Stunden damit verbracht, meine Funktion zu verfeinern, die Teamwork-Codebasis zu erweitern und das Anhänge-Hashing zu implementieren. Da Signaturbilder das Problem waren, musste ich den Fingerabdruck nur für Anhänge trainieren, bei denen es sich tatsächlich um Bilddateien handelte (PNG, GIF, BMP, JPEG, JPG, TIFF usw.). Signaturbilder sind ebenfalls überwiegend kleine Dateien, sodass ich nur wirklich Bilder verarbeiten muss Dateien unter 100kb. Wenn wir eine E-Mail verarbeiten und die Liste der Anhänge erhalten, übergeben wir alle Bildanhänge über meine neue Funktion, die die Zeichenfolge "Fingerabdruck" zurückgibt. Wir verarbeiten alle Anhänge wie gewohnt und speichern den Fingerabdruck zusammen mit der Dateireferenz in der Datenbank. Wenn eine E-Mail das nächste Mal verarbeitet wird, machen wir für jeden Bildanhang dasselbe, aber wir durchsuchen die Datenbank, um festzustellen, ob wir bereits ein Bild mit demselben „Fingerabdruck“ haben. Wenn wir eine Übereinstimmung erhalten, protokollieren wir die Übereinstimmung zur späteren Analyse, überspringen den Anhang und fahren mit dem nächsten fort, und so weiter. Wir haben einen Index für die Tabelle "Dateien" in der Datenbank für den "Fingerabdruck" hinzugefügt. Dies bedeutet, dass wir unsere Übereinstimmung sofort erhalten, selbst wenn die Tabelle Millionen von Datensätzen enthält. Seit wir dies gestern implementiert haben, haben unsere Protokolldateien einen massiven Anstieg der Anzahl der erkannten und aus der E-Mail-Antwortfunktion entfernten Signaturbilder gezeigt. Wenn eine Antwort per E-Mail zum ersten Mal für einen Benutzer verarbeitet wird, werden die Signaturbilder wie gewohnt hinzugefügt, aber von da an werden sie übersprungen. Wenn Sie die Dateien aus Ihrem Teamwork-Projekt löschen, stimmen wir bei der nachfolgenden Verarbeitung weiterhin mit den Bild-Fingerabdrücken überein. Hoffentlich beantworte ich nie wieder Feedback zu Signature Images! Und.