mail+speciale tekens lukt niet

Status
Niet open voor verdere reacties.

star3200

Gebruiker
Lid geworden
5 apr 2001
Berichten
409
waar ß in het vetgedrukt staat moet eigenlijk de ascii-code staan, dit forum zet ze vanzelf om naar het teken :-)

Ik gebruik volgende functie om gepersonaliseerde mails (de gegevens komen uit een databank) te sturen vanaf mijn site, dit werkt perfect zolang er geen speciale tekens in de naam, het onderwerp,.. zitten.

Als voorbeeld heb ik een onderwerp: "stoßen" , wanneer de ß zo in de databank zit, dan wil hij de mail niet versturen. Als ik de ß in de databank steek als ascii-code dan wordt de mail wél verstuurd en staat het ß-teken ook juist in de mail zelf, maar niet in het onderwerp, daar krijg ik "Stoßen" te zien.

Ik dacht, ik probeer eens met het als ascii-code in de databank zetten, en dan eerst omzetten naar het teken (
Code:
    $string = str_replace("[B]ß[/B]", "ß", $string);
maar dan wordt de mail weer gewoon niet verstuurd.

Ik zoek eigenlijk een manier om dit werkende te krijgen zonder dat ik in de databank de ascii-code moet hebben staan, want ze staan al gewoon als teken in de databank staan.


Code:
function protectMailHeaders($string) 
{ 
    $string = str_replace("\n", "", $string); // Verwijder \n 
    $string = str_replace("\r", "", $string); // Verwijder \r 
    $string = str_replace("\t", "", $string); // Verwijder \t 
    $string = str_replace("[B]ß[/B]", "ß", $string);
    //$string = str_replace("\"", "\\\"", str_replace("\\", "\\\\", $string)); // Slashes van quotes 

    return $string; 
} 

function jnmmail($naaremail,$naarvoornaam,$naarachternaam,$vanemail,$vannaam,$onderwerp,$bericht,$verzonden){

	$naaremail = protectMailHeaders($naaremail);
	$naarvoornaam = protectMailHeaders($naarvoornaam);
	$naarachternaam = protectMailHeaders($naarachternaam);
	$vanemail = protectMailHeaders($vanemail);
	$vannaam = protectMailHeaders($vannaam);
	$onderwerp = protectMailHeaders($onderwerp);
	$bericht = str_replace("http://","hatetepedubbelslashslash",$bericht);
	$bericht = protectMailHeaders(str_replace(":",":",$bericht));
	$bericht = str_replace("hatetepedubbelslashslash","http://",$bericht);
/*	test($naaremail);
	test($naarvoornaam);
	test($naarachternaam);
	test($vanemail);
	test($vannaam);
	test($onderwerp);
	*/

	if(valid_email($naaremail) && valid_email($vanemail)   && ctype_print($vanemail) && ctype_print($onderwerp) && ctype_print($naaremail) && ctype_print($naarvoornaam) && (ctype_print($naarachternaam) || $naarachternaam=="") && ctype_print($vannaam) && ctype_print($bericht)){

$bericht = '
<html>
<head>
	<title>'.$onderwerp.'</title>
  	<style type="text/css">

	body {
		background-color: #F5F5EB;
		font-family: Arial, Helvetica, Verdana, sans-serif;
		color: #FFFFFF;
		line-height: 15pt;
	}
	h2{
		font-weight:bold;
		font-size:14pt;
		color:#3A9300;
		text-align:center;
	}
	.maillink a:visited,.maillink  a:active,.maillink  a:link  {
	    color:#3A9300;
	    text-decoration:none;
	}
	.maillink a:hover  {
	    color:#E38025;
	    text-decoration:none;
	}
	p{
		margin:0;
		padding:0;
	}
</style> 
</head>
<body bgcolor="#F5F5EB">
'.mailbericht($onderwerp,$bericht,$naarvoornaam,$verzonden).'
</body>
</html>
';

	$headers  = 'MIME-Version: 1.0' . "\r\n";
	$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
    //  $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";

//	$headers .= 'To: '.$naarvoornaam.' '.$naarachternaam.' <'.$naaremail.'>' . "\r\n";
	$headers .= 'From: '.$vannaam.' <'.$vanemail.'>' . "\r\n";
	$headers .= 'X-Mailer: PHP v'.phpversion() . "\r\n"	;
	$headers .= 'Reply-To: '.$vannaam.' <'.$vanemail.'>' . "\r\n";
	$headers .= 'Return-Path: '.$vannaam.' <'.$vanemail.'>' . "\r\n";
	$headers .= 'Message-ID: '.$vannaam.' <'.$vanemail.'>' . "\r\n";	

		return mail($naaremail, $onderwerp, $bericht, $headers);
	}else{

		return false;
	}

}
 
Laatst bewerkt:
De functie htmlspecialchars(); al geprobeerd?

Anders probeer je dit:
PHP:
$string = str_replace("ß","&szlig;", $string);
Volgens mij is dat hetzelfde teken
 
Wat ik heb geprobeerd is om htmlspecialchars() als volgt te gebruiken:

Code:
$onderwerp = htmlspecialchars(protectMailHeaders($onderwerp));
en
Code:
$onderwerp = protectMailHeaders(htmlspecialchars($onderwerp));

beiden geven als resultaat dat de mail niet verstuurd wordt.


Als ik
Code:
$string = str_replace("ß","&szlig;", $string);
gebruik, dan wordt de mail wederom wél verstuurd, maar in het onderwerp staat er dan
Code:
sto&szlig;en
 
Verstuur je de mail wel als HTML? En niet als 'platte' tekst?
 
Laatst bewerkt:
Ja hoor, dat gebeurd toch hier:
Code:
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";

In ieder geval, de inhoud van mijn mail is volledig correct, inclusief speciale tekens worden er juist in weergegeven..het is enkel het onderwerp & de naam van de zender/ontvanger dat de speciale tekens niet wil weergeven. :confused:

Ik test trouwens door te zenden naar een Gmailadres, dus het is niet dat mijn mailontvanger de tekens niet ondersteund in de headers..
 
Ik had mijn vorige post eigenlijk al willen verwijderen, maar zag daar zo gauw geen mogelijkheid toe, daarom had ik de tekst even slecht zichtbaar gemaakt en vermeld waarom.

Ik had je code niet goed gelezen... Sorry
 
Ik heb de oplossing gevonden!! Hierbij de oplossing:

In mijn code kijk ik met de functie ctype_print() na of er er geen vreemde tekens instaan, als er in het onderwerp of in de naam een teken staat als ï , é , è , ... dan lukt het dus niet. :thumb:
Code:
if(valid_email($naaremail) && valid_email($vanemail)   && ctype_print($vanemail) && ctype_print($onderwerp) && ctype_print($naaremail) && ctype_print($naarvoornaam) && (ctype_print($naarachternaam) || $naarachternaam=="") && ctype_print($vannaam) && ctype_print($bericht)){

Maar er is één klein vreemd iets, als ik een mail verstuur met een speciaal teken in dan plaatst hij ook op een willekeurige plaats (plaats veranderd bij elke mail die ik stuur) een uitroepteken in de mail zelf..dus letterlijk iets als dit:

Stel dat mijn bericht " Hallo Stijn, tot straks " is dan krijg ik zoiets aan: " Hallo Stijn, t!ot straks ".

De oplossing voor het uitroeptekenprobleem:
Code:
$bericht = wordwrap(protectMailHeaders(str_replace(":",":",$bericht)),500,"\n");
mailberichten van meer dan een 900-tal karakters zorgen voor het verschijnen van uitroeptekens, dit los ik op door \n toe te voegen achter elke 500 tekens.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan