Formatierung VCard in PHP

Ich versuche zum generieren einer VCard via PHP und Ihnen per E-Mail, um den Benutzer. Ich schrieb eine erste script mit hart codierten Daten, aber das Ergebnis wird füllen Sie die VCard-Datei aus MySQL.

Beim betrachten der VCard-side-by-side mit einem legitimen VCard-Datei (heruntergeladen und getestet von einer anderen Seite) sehen Sie ziemlich identisch, aber wenn ich versuche, und der import meiner generierten VCard-es zeigt mit keine Daten. Eigentlich, wenn ich es auf meinem Handy, es gar nicht zu erkennen, dass es eine vcard-Datei, und stattdessen schickt Sie mich zu einem gebrochenen Google-Doc.

Ich geliehen habe einige code aus der wikipedia zum formatieren der vcard-Datei, und alles scheint in Ordnung. Sehen Sie irgendwelche Fehler in meiner Formatierung? Ich habe versucht, verschiedene Zeilenumbrüche - ohne Erfolg. Ideen?

Hier ist der code für meine generation /E-mail:

<?php
$content = "BEGIN:VCARD\r";
$content .= "VERSION:3.0\r";
$content .= "CLASS:PUBLIC\r";
$content .= "FN:Joe Wegner\r";
$content .= "N:Wegner;Joe ;;;\r";
$content .= "TITLE:Technology And Systems Administrator\r";
$content .= "ORG:Wegner Design\r";
$content .= "ADR;TYPE=work:;;21 W. 20th St.;Broadview ;IL;60559;\r";
$content .= "EMAIL;TYPE=internet,pref:[email protected]\r";
$content .= "TEL;TYPE=work,voice:__munged__\r";
$content .= "TEL;TYPE=HOME,voice:__munged__\r";
$content .= "URL:http://www.wegnerdesign.com\r";
$content .= "END:VCARD";

mail_attachment("Joe Wegner.vcf", $content, "[email protected]", "[email protected]", "Wegner Design Contacts", "[email protected]", "Joe Wegner's Contact Info", "");

function mail_attachment($filename, $content, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {
        $fileatt_type = "application/octet-stream";

        $headers = "FROM: ".$from_mail;

        $data = chunk_split(base64_encode($content));

        $semi_rand = md5(time());
        $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

        $headers .= "\nMIME-Version: 1.0\n" .
        "Content-Type: multipart/mixed;\n" .
        " boundary=\"{$mime_boundary}\"";

        $message .= "This is a multi-part message in MIME format.\n\n" .
        "--{$mime_boundary}\n" .
        "Content-Type:text/html; charset=\"iso-8859-1\"\n" .
        "Content-Transfer-Encoding: 7bit\n\n" .
        $message . "\n\n";
        $message .= "--{$mime_boundary}\n" .
        "Content-Type: {$fileatt_type};\n" .
        " name=\"{$filename}\"\n" .
        "Content-Transfer-Encoding: base64\n\n" .
        $data . "\n\n" .
        "--{$mime_boundary}--\n";
        echo "sending message";
        mail($mailto, $subject, $message, $headers);
}
?>

Update 1: Das macht mich mehr verwirrt, aber vielleicht hilft es beim Debuggen. Ich heruntergeladen habe meine (schlechten) generierten VCard-Datei auf meinem Rechner, sowie eine gute VCard heruntergeladen von einer anderen Webseite. Wie erwartet, meine erzeugt, geöffnet wird mit "keine Daten", aber die gut funktioniert. Dann habe ich eine Dritte leere Datei mit ein .vcf-Dateiendung erlangen, und kopiert den text aus meinem (schlechten) Datei in das leere Datei. Ich öffnete die Datei, und alle Daten, die zeigten, perfekt. Um zu testen, sogar noch weiter, ich habe den text kopiert von der guten VCard-Datei in mein bad-Datei, und es ist noch immer geöffnet, keine Daten. So, es scheint es ist etwas über Codierung oder eine Datei, die Sache, die ich nicht verstehe. Es ist nicht die Berechtigungen - alle identisch.

Update 2: änderte ich meine PHP so, dass es mich zwingen würde, laden Sie die VCard-Datei als auch als E-Mail. Die heruntergeladene Datei öffnet völlig in Ordnung, so dass der Fehler passiert, wie ich bin-Codierung (richtige Wort?) die Datei, oder wie GMail interpretting.

Update 3: Behoben : es Herausgefunden. Ich bin mir nicht sicher, warum das so ist - weil alle anderen tutorial habe ich herausfinden können, gibt es sagt das Gegenteil - aber es gab ein paar wichtige änderungen. Zuerst änderte ich die Kodierung für die E-Mail von base64, 8bit, und ich änderte den Inhalt des Anhangs einfach nur die Zeichenfolge übergeben, um die E-Mail-Funktion (also, dass es in 8bit form, nicht 64). Das machte die VCard gültig und lesbar auf meinem desktop. Um es zu Lesen auf meinem android musste ich die $fileatt_type variable "text/x-vcard", ansonsten Gmail denkt, es ist ein Dokument.

Welche ide benutzt du?Manchmal habe ich die "Codierung" Probleme im Zusammenhang mit der Art der php-Datei codiert ist. Dies geschieht in der Regel bei mir beim Bearbeiten von php-Dateien erstellt mit dem mac.
Ich bin editieren in vim. Soweit ich weiß, gibt es keinen Weg, um die Codierung ändern Dinge drauf, obwohl das klingt wie könnte es ähnlich wie mein problem.

InformationsquelleAutor jwegner | 2011-05-31

Schreibe einen Kommentar