Zur Navigation

Eingelesene Mail als Bild darstellen oder Verschlüsseln

1 andehrl

hallo zusammen,
ich habe in meiner site eine detailergebnisseite in der u.a. eine emailadresse angezeigt wird, die mit dem standardmailprogramm verknüpft ist.

schaut bislang so aus:

<a href="mailto:<?php echo $row_R1['mail'] ?>" class="ergebnisschriftmailer"><?php echo $row_R1['mail'] ?></a>

das kam mir erst mal benutzerfreundlich und angenehm vor. allerdings kann auf diese weise jeder einfache "mail-grabber" die mails einsammeln. und das ist natürlich nicht gut. ich habe bei ähnlichen webseiten gesehen, dass die mails als bilder auf der seite dargestellt werden und dadurch nicht kopiert werden können. find ich gut, aber wie mache ich das.

06.12.2010 20:34

2 Jörg Kruse

dass die mails als bilder auf der seite dargestellt werden und dadurch nicht kopiert werden können. find ich gut, aber wie mache ich das.

Du erstellst mit einem Grafik-Programm eine Grafikdatei (png oder gif) mit der Emailadresse und bindest diese Datei über ein <img> Element an gewünschter Stelle ein.

06.12.2010 21:57

3 andehrl

Du erstellst mit einem Grafik-Programm eine Grafikdatei (png oder gif) mit der Emailadresse und bindest diese Datei über ein <img> Element an gewünschter Stelle ein.

das funktioniert aber doch nur wenn die adresse immer dieselbe bleibt, oder??
im fall der detailergebnisseite werden je nach datensatz immer unterschiedliche adressen angezeigt.

06.12.2010 22:30

4 Jörg Kruse

Wenn du die Grafiken dynamisch erstellen willst, könntest du das mithilfe der PHP-Funktion imagettftext()

07.12.2010 00:36

5 andehrl

ich würde gerne dieses script verwenden. wie muss ich dann echo $row_R1['mail'] in $_REQUEST[''] einbinden?
kann ich den Content-type so lassen oder muss ich ihn neu bestimmen? und ist es möglich bei $font eine class anzugeben, wie zb.:

$font = 'class="ergebnisschriftmailer"'

oder muss ich bei $font = 'arial.ttf' bleiben?


<?php
$EMAIL=$_REQUEST['mail'];
// Set the content-type
header('Content-type: image/png');

// Create the image
$im = imagecreatetruecolor(350, 30);

// Create some colors
$white = imagecolorallocate($im, 0, 0, 0);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 255, 255, 255);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

// The text to draw
$text = $EMAIL;
// Replace path by your own font path
$font = 'cour.ttf';

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>

07.12.2010 15:55

6 Jörg Kruse

Zitat von andehrl
ich würde gerne dieses script verwenden. wie muss ich dann echo $row_R1['mail'] in $_REQUEST[''] einbinden?

Im src Attribut des img verlinkst du das Script, welches die Grafik erstellt, und hängst den Parameter mail an die URL dran:

<img src="email-script.php?mail=<?php echo $row_R1['mail'] ?>" alt="" />

Allerdings können die Bots dann im HTML-Quelltext über den Parameter die Emailadresse auslesen. Besser wäre es deswegen, nur eine ID zu übergeben, und dann im Script mit der ID über eine Datenbankabfrage die Emailadresse zu ermitteln

kann ich den Content-type so lassen oder muss ich ihn neu bestimmen?

Wenn du eine png Datei erstellst, solltest du das so lassen

und ist es möglich bei $font eine class anzugeben, wie zb.:

$font = 'class="ergebnisschriftmailer"'

oder muss ich bei $font = 'arial.ttf' bleiben?

Unter $font musst du den Pfad zur Font-Datei angeben, die zum Beschreiben der Grafikdatei verwendet werden soll

07.12.2010 16:35 | geändert: 07.12.2010 16:36

7 andehrl

Besser wäre es deswegen, nur eine ID zu übergeben, und dann im Script mit der ID über eine Datenbankabfrage die Emailadresse zu ermitteln

ich habe über die recordID eine datenbankabfrage auf der seite kann ich diese recordID benutzen oder muss ich ein verstecktes feld mit der datensatz-id einfügen.
wie übergebe ich dann die entsprechende id um das bild zu erzeugen?

so sieht die abfrage mit der recordID aus:

$colname_R1 = "-1";
if (isset($_GET['recordID'])) {
  $colname_R1 = $_GET['recordID'];
}
mysql_select_db($database_Eingabe, $Eingabe);
$query_R1 = sprintf("SELECT Eingabe.id, Eingabe.abfahrtsort, Eingabe.zielort, DATE_FORMAT(Eingabe.datum, '%%d.%%m.%%Y') AS datum_formatiert, TIME_FORMAT(Eingabe.zeit, '%%H:%%i') AS zeit_formatiert, Eingabe.hinfahrtladeflaeche, Eingabe.hilfeeinausladen, Eingabe.rueckfahrt, Eingabe.rueckfahrtladeflaeche, Eingabe.beschreibung, Eingabe.preis, Eingabe.marke, Eingabe.model, Eingabe.laderaumhoehe, Eingabe.laderaumbreite, Eingabe.laderaumlaenge, Eingabe.laderaumvolumen, Eingabe.treibstoff, Eingabe.getriebe, Eingabe.tempo, Eingabe.nutzername, Eingabe.passwort, Eingabe.mail, Eingabe.handy, Eingabe.tel FROM Eingabe WHERE id = %s", GetSQLValueString($colname_R1, "int"));
$R1 = mysql_query($query_R1, $Eingabe) or die(mysql_error());
$row_R1 = mysql_fetch_assoc($R1);
$totalRows_R1 = mysql_num_rows($R1);$colname_R1 = "-1";
if (isset($_GET['recordID'])) {
  $colname_R1 = $_GET['recordID'];
}

?>

hab grad noch ein verstecktes feld einfügt mit der id:

<input name="hiddenField" type="hidden" id="hiddenField" value="<?php echo $row_R1['id']; ?>" />

07.12.2010 17:06 | geändert: 07.12.2010 17:25

8 Jörg Kruse

Du hängst einfach diese ID an die URL:

<img src="email-script.php?id=<?php echo $recordID ?>" alt="" />

In dem Bilder-Script kannst du dann wieder darauf zugreifen:

$recordID = (int) $_GET['id'];

... und damit die notwendige Datenbankabfrage zur Ermittlung der Emailadresse stellen

07.12.2010 17:29

9 andehrl

Zitat von Jörg

... und damit die notwendige Datenbankabfrage zur Ermittlung der Emailadresse stellen

habe ich die notwendige datenbankabfrage nicht schon oben angelegt?

07.12.2010 17:43

10 Jörg Kruse

Du benötigst die Abfrage in dem Script, das die Bilddatei erzeugt.

07.12.2010 17:51