PHP Mail probleem

Status
Niet open voor verdere reacties.

Nickdude

Gebruiker
Lid geworden
2 dec 2004
Berichten
88
Beste heren/dames,

Ik heb al enige tijd een probleem met een php form om een mail te versturen.
Code is van PhMailer, alleen heb ik het email adres waar de mail naar toe moet veranderd (deze komt uit een code die in de url staat).
Dus bijvoorbeeld mail.php/id=iemand@iets.com

Vervolgens zeg ik:
$url = getenv("REQUEST_URI");
$to = substr($url, strrpos($url, "id=") + 3, strlen($url) - strrpos($url, "id=") - 3);

als ik $to toevoeg ergens op de pagina in de html codes, dan klopt het email adres. Echter wanneer ik $to gebruik in de php mail functie, komt de mail niet aan. echter als ik zeg $to = "iemand@iets.com"; in de code, dan komt de mail weer wel aan.

als ik $to laat zien in het bericht van de mail (om te kijken wat er mis gaat) krijg ik een hele rare tekenreeks: ¥ªOßß3÷„ €ß¬Ràð½³`

Ik dacht aan een probleem in character set (UTF / ISO), maar krijg het niet voor elkaar om het probleem om te lossen.

Iemand een idee wat er mis gaat?
 
met de $_GET functie krijgt ik het wederom goed in beeld, maar komt er in het bericht helemaal niets (dus ook geen rare tekens, maar helemaal niets)
 
REQUEST_URI staat niet in $_GET. Deze is te vinden in $_SERVER. Probeer dat eens, hoewel het geen verschil zou moeten uitmaken.
 
Die functie gebruik ik niet, dus lijkt mij dat dat het probleem niet kan zijn. Ik zal de complete code posten:

De pagina die wordt opgeroept is:
pagina.php?id=uygh87h8h8h89h8hoiupoiuh8ohoi78ho8hu
Hierin is de id code een tekst die onleesbaar is gemaakt middels een code. op de pagina zelf wordt deze weer teruggezet

PHP:
<?php

header("Content-Type: text/html;charset=iso-8859-1");


$websitename="Contactform somewhere.nl<br /><br />"; 
$allowtypes=array("zip", "pdf", "rar", "txt", "doc", "jpg", "png", "gif", "odt", "xml");
$myemail="nick@somewhere.nl";

					
function decode($string,$key) {
    $key = sha1($key);
    $strLen = strlen($string);
    $keyLen = strlen($key);
    for ($i = 0; $i < $strLen; $i+=2) {
        $ordStr = hexdec(base_convert(strrev(substr($string,$i,2)),36,16));
        if ($j == $keyLen) { $j = 0; }
        $ordKey = ord(substr($key,$j,1));
        $j++;
        $hash .= chr($ordStr - $ordKey);
    }
    return $hash;
}
//tekstsecretcode is om code te converteren naar de tekst
$myamail = decode($_GET["id"],"tekstsecretcode");


$priority="3"; 
$allowattach="1"; 
$max_file_size="5120";
$max_file_total="5120";
$submitvalue=" Verzenden "; 
$resetvalue=" Reset ";
$defaultsubject="Vraag vanaf somewhere.nl"; 
$use_subject_drop=false;
$subjects=array("Department 1", "Department 2", "Department 3");
$emails=array("dept_1@domain.com", "dept_2@domain.com", "dept_3@domain.com");
$thanksmessage="Uw bericht is verzonden. U krijgt z.s.m. antwoord!"; 

/*
//================================================================================
* ! ATTENTION !
//================================================================================
: Don't edit below this line.
*/

// Function to get the extension of the uploaded file.
function get_ext($key) { 
	$key=strtolower(substr(strrchr($key, "."), 1));
	$key=str_replace("jpeg", "jpg", $key);
	return $key;
}

// Function used to attach files to the message
function phattach($file, $name, $boundary) {
	
	$fp=fopen($file, "r");
	$str=fread($fp, filesize($file));
	$str=chunk_split(base64_encode($str));
	$message="--".$boundary."\n";
	$message.="Content-Type: application/octet-stream; name=\"".$name."\"\n";
	$message.="Content-disposition: attachment; filename=\"".$name."\"\n"; 
	$message.="Content-Transfer-Encoding: base64\n";
	$message.="\n";
	$message.="$str\n";
	$message.="\n";

	return $message;
}

//Little bit of security from people forging headers. People are mean sometimes :(
function clean_msg($key) {
	$key=str_replace("\r", "", $key);
	$key=str_replace("\n", "", $key);
	$find=array(
		"/bcc\:/i",
		"/Content\-Type\:/i",
		"/Mime\-Type\:/i",
		"/cc\:/i",
		"/to\:/i"
	);
  $key=preg_replace($find, "", $key);
  return $key;
}

// Initilize some variables
$error="";
$sent_mail=false;

// When the form is submitted
If($_POST['submit']==true) {
	extract($_POST, EXTR_SKIP);

		// Check the form for errors
		If(trim($yourname)=="") { 
			$error.="You did not enter your name!<br />";
		}
		
		If(trim($youremail)=="") { 
			$error.="You did not enter your email!<br />";
		} Elseif(!preg_match("/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/", $youremail)) {
			$error.="Invalid email address.<br />";
		}

		If(trim($emailsubject)=="") {
			$emailsubject=$defaultsubject;
		}

		If(trim($emailsubject)<>"") {
			$emailsubject=$defaultsubject.": ".$emailsubject;
		}
        
		If(trim($yourmessage)=="") { 
			$error.="You did not enter a message!<br />";
		}
		
		// Verify Attchment info
		If($allowattach > 0) {
			
			// Get the total size of all uploaded files
			If((array_sum($_FILES['attachment']['size'])) > ($max_file_total*1024)) {
				
				$error.="The max size allowed for all your files is ".$max_file_total."kb<br />";
				
			} Else {

				//Loop through each of the files
				For($i=0; $i <= $allowattach-1; $i++) {
					
					If($_FILES['attachment']['name'][$i]) {
	
						//Check if the file type uploaded is a valid file type. 
						If(!in_array(get_ext($_FILES['attachment']['name'][$i]), $allowtypes)) {
							
							$error.= "Invalid file type for your file: ".$_FILES['attachment']['name'][$i]."<br />";
							
						//Check the size of each file
						} Elseif(($_FILES['attachment']['size'][$i]) > ($max_file_size*1024)) {
							
							$error.= "Your file: ".$_FILES['attachment']['name'][$i]." is to big.<br />";
							
						} // If in_array
						
					} // If Files
					
				} // For
				
			} // Else array_sum($_FILES['attachment']['size'])
			
		} // If Allowattach

	If($error) {
	
		$display_message=$error;

	} Else {
		
		If($use_subject_drop AND is_array($subjects) AND is_array($emails)) {
			$subject_count=count($subjects);
			$email_count=count($emails);
			
			If($subject_count==$email_count) {
				
				$myemail=$emails[$emailsubject];
				$emailsubject=$subjects[$emailsubject];

			} // If $subject_count
			
		} // If $use_subject_drop

		$boundary=md5(uniqid(time()));
		
		//Headers
		$headers="Return-Path: <".clean_msg($youremail).">\n";
		$headers.="From: ".clean_msg($yourname)." <".clean_msg($youremail).">\n";
		$headers.="X-Mailer: PHP/".phpversion()."\n";
		$headers.="X-Sender: ".$_SERVER['REMOTE_ADDR']."\n";
		$headers.="X-Priority: ".$priority."\n"; 
		$headers.="MIME-Version: 1.0\n";
		$headers.="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\n";
		$headers.="This is a multi-part message in MIME format.\n";

		//Message
		$message = "--".$boundary."\n";
		$message.="Content-Type: text/html; charset=\"iso-8859-1\"\n";
		$message.="Content-Transfer-Encoding: quoted-printable\n";
		$message.="\n";
		$message.=clean_msg(nl2br(strip_tags($yourmessage)));
		$message.="\n";

		//Add attachments to message
		If($allowattach > 0) {
			
			For($i=0; $i <= $allowattach-1; $i++) {
				
				If($_FILES['attachment']['tmp_name'][$i]) {
					
					$message.=phattach($_FILES['attachment']['tmp_name'][$i], $_FILES['attachment']['name'][$i], $boundary);
					
				} //If $_FILES['attachment']['name'][$i]
				
			} //For
			
		} // If
		
		// End the message
		$message.="--".$boundary."--\n";
		
		// Opzoeken email
		

		// Send the completed message
		
		If(!mail($myamail, clean_msg($emailsubject), $message, $headers)) {
			//$message
			Exit("An error has occured, please report this to the website administrator.\n");
			
		} Else {
			$sent_mail=true;
			
		}

	} // Else

} // $_POST

/*
//================================================================================
* Start the form layout
//================================================================================
:- Use the html below to customize the form.
*/
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Language" content="en-us" />
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title><?php echo $websitename; ?></title>

		

<style type="text/css">
	body{
		background-color:#FFFFFF;
		font-family: Verdana, Arial, sans-serif;
		font-size: 12pt;
		color: #000000;
	}
	
	.error_message{
		font-family: Verdana, Arial, sans-serif;
		font-size: 11pt;
		color: #FF0000;
	}
	
	.thanks_message{
		font-family: Verdana, Arial, sans-serif;
		font-size: 11pt;
		color: #000000;
	}
	
	a:link{
		text-decoration:none;
		color: #000000;
	}
	a:visited{
		text-decoration:none;
		color: #000000;
	}
	a:hover{
		text-decoration:none;
		color: #000000;
	}
	
	.table {
		border-collapse:collapse;
		border:1px solid #000000;
		width:500px;
	}
	
	.table_header{
		border:1px solid #070707;
		background-color:#C03738;
		font-family: Verdana, Arial, sans-serif;
		font-size: 11pt;
		font-weight:bold;
		color: #FFFFFF;
		text-align:center;
		padding:2px;
	}
	
	.attach_info{
		border:1px solid #070707;
		font-family: Verdana, Arial, sans-serif;
		font-size: 8pt;
		color: #000000;
		padding:4px;
	}
	
	
	.table_body{
		border:1px solid #070707;
		font-family: Verdana, Arial, sans-serif;
		font-size: 10pt;
		color: #000000;
		padding:2px;
	}
	
	.table_footer{
		border:1px solid #070707;
		background-color:#C03738;
		text-align:center;
		padding:2px;
	}
	
	input,select,textarea {
		font-family: Verdana, Arial, sans-serif;
		font-size: 10pt;
		color: #000000;
		border:1px solid #000000;
	}
	
	.copyright {
		border:0px;
		font-family: Verdana, Arial, sans-serif;
		font-size: 9pt;
		color: #000000;
		text-align:right;
	}
	
	form{
		padding:0px;
		margin:0px;
	}
</style>

<script type="text/javascript">
var error="";
e_regex = /^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,})+$/;

function Checkit(theform) {
	if(theform.yourname.value=="") {
		error+="Vul uw naam in!\n";
	}
	
	if(theform.youremail.value=="") {
		error+="Vul uw email adres in!\n";
	} else if(!e_regex.test(theform.youremail.value)) {
		error+="Ongeldig email adres!\n";
	}
		
	if(theform.yourmessage.value=="") {
		error+="Vul uw vraag in!\n";
	}
	
	if(error) {
		alert('**De volgende fouten zijn geconstateerd:**\n\n' + error);
		error="";
		return false;
	} else {
		return true;
	}
}
</script>
</head>
<body class="thanks_message">
<?If($display_message) {?>

<div align="center"><strong>
  <?=$display_message;?>
</strong><strong></strong></div>
<br />

<?}?>

<?If($sent_mail!=true) {?>



<form method="post" action="<?=$_SERVER['PHP_SELF'];?>" enctype="multipart/form-data" name="phmailer" onsubmit="return Checkit(this);">
<table align="center">
	<tr>
		<td width="100%" colspan="2" align="center"><?=$websitename;?></td>
	</tr>

	<?If($allowattach > 0) {?>
		<tr>
			<td width="100%" colspan="2">&nbsp;</td>
		</tr>
	<?}?>
	
	<tr>
		<td width="30%">Naam:</td>
		<td width="70%"><input name="yourname" type="text" size="30" value="<?=stripslashes(htmlspecialchars($yourname));?>" />		  *</td>
	</tr>
	<tr>
		<td width="30%">Email:</td>
		<td width="70%"><input name="youremail" type="text" size="30" value="<?=stripslashes(htmlspecialchars($youremail));?>" />		  *</td>
	</tr>
	<tr>
		<td width="30%">Onderwerp:</td>
		<td width="70%">
		
			<?If($use_subject_drop AND is_array($subjects)) {?>
					<select name="emailsubject" size="1">
					  <?while(list($key,$val)=each($subjects)) {?>
					  
					  <option value="<?=intval($key);?>">
				      <?=htmlspecialchars(stripslashes($val));?>
				      </option>
					  
					  <?}?>
		  </select>
				
             
			
			<?} Else {?>
				
				<input name="emailsubject" type="text" size="30" value="<?=stripslashes(htmlspecialchars($emailsubject));?>" />
			<?}?>		</td>
	</tr>

	<?For($i=1;$i <= $allowattach; $i++) {?>
		<tr>
          <td>Bestand:</td>
		  <td><input name="attachment[]" type="file" size="30" /></td>
    </tr>
		<tr>
			<td width="30%">&nbsp;</td>
			<td width="70%"></td>
           
		</tr>
	<?}?>
	
	<tr>
		<td width="100%" colspan="2" align="left">Bericht:*<br />			<div align="center">
		    <textarea name="yourmessage" align="left" rows="8" cols="60"><?=stripslashes(htmlspecialchars($yourmessage));?></textarea>
		  </div>		</td>
	</tr>
	<tr>
	  <td colspan="2" align="center"><input type="hidden" name="submit" value="true" />
        <input type="submit" value="<?=$submitvalue;?>" />
        &nbsp;
      <input type="reset" value="<?=$resetvalue;?>" /></td>
    </tr>
	<tr>
		<td width="100%" colspan="2" align="center">&nbsp;</td>
	</tr>
</table>

</form>

<?} Else {?>

	<div align="center"><?=$thanksmessage;?>
	</div>
	<br />
	<br />

<?}
//Please leave this here.. It's very small and non-obtrusive. ?>	

</body>
</html>

Als ik $myamail gebruik in de regel
PHP:
If(!mail($myamail, clean_msg($emailsubject), $message, $headers)) {
			//$message
Dan werkt het niet, de string is helemaal niks volgens de code... Als ik $myemail gebruik (handmatig ingevoerde tekst), dan werkt alles wel. Echter als ik $myamail laat zien op de pagina in de html sectie, dan laat deze gewoon het juist email adres zien.

Weet iemand hoe dit komt? Alvast bedankt!
 
Laatst bewerkt door een moderator:
Laat maar, heb het al op een andere manier opgelost!
Toch bedankt allen!
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan