Scripts

E-mail met meerdere attachments

Dit script is niet bestemd als kant en klare oplossing. Ik heb dit script geschreven om enig inzicht te verschaffen in hoe je een e-mailbericht met meerdere bijlagen (dynamisch) kunt opbouwen.

email-met-meerdere-attachments
[code]
<?php

//Toegestane MIME-typen
$allowed=array('image/x-png','image/jpeg','image/bmp','image/pjpeg','text/plain','text/html','image/png','image/gif','application/x-js','application/x-shockwave-flash');
//Maximale aantal bijlagen. Wordt overgenomen door JavaScript file input en ook server sided geverifieerd
$max_atts=3;

function validate($param)
{
    if(ereg("^[^@]{1,64}@[^@]{1,255}$",$param))
    {
        $addr=explode("@",$param);
        $local=explode(".",$addr[0]);
        for($i=0;$i<sizeof($local);$i++)
        {
            if(!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$",$local[$i]))
            return 0;
        }
        if(!ereg("^\[?[0-9\.]+\]?$",$addr[1]))
        {
            $domain=explode(".",$addr[1]);
            if(sizeof($domain)<2)
            return 0;
            for($i=0;$i<sizeof($domain);$i++)
            {
                if(!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$",$domain[$i]))
                return 0;
            }
        }
        return 1;
    }
    else
    return 0;
}

function verify_field()
{
	$err="";
	if(validate($_POST['send_mail'])==0)
	{
	 	$err.="<li>Geef een correct geformuleerd e-mailadres</li>\n";
		$error=1;
	}
	$recipients=explode(",",$_POST['rec_name']);
    for($i=0;$i<sizeof($recipients);$i++)
    {
        if(validate($recipients[$i])==0)
        {
         	$err.="<li>Geef 1 of meerdere correct geformuleerde ontvangers op, gescheiden door een komma</li>\n";
        	$error=1;
        }
    }
    if($err!="")
    {
    	echo($err);
		return false; 
    }
    else
    return true;
}

function geterror($id)
{
    switch($id)
    {
        case '1':
            return 'Het bestand is te groot';
        break;
        case '2':
            return 'Het bestand is groter dan gespecificeerd in HTML form MAX_FILE_SIZE';
        break;
        case '3':
            return 'Het bestand is gedeeltelijk geupload';
        break;
        case '4':
            return 'Er is geen upload aangekomen';
        break;
    }
}

function getstring($charno)
{
    switch($charno)
    {
        case '0':
            return 'text/plain';
        break;
        case '1':
            return 'text/html';
        break;
        default:
            return 'text/plain';
        break;
    }    
}

function getcharset($charno)
{
    switch($charno)
    {
        case '0':
            return 'us-ascii';
        break;
        case '1':
            return 'utf-8';
        break;
        default:
            return 'us-ascii';
        break;
    }
}

if(!empty($_POST))
{
 	if(verify_field()==true)
 	{
		$header="From: ".addslashes($_POST['send_name'])." <".addslashes($_POST['send_mail']).">\r\n";
		$header.="To: ".$_POST['rec_name']."\r\n";
		if(strlen($_POST['subject'])>0)
		$header.="Subject: ".$_POST['subject']."\r\n";
		$header.="Return-Path: <".$_POST['send_mail'].">\r\n";
		$header.="Mime-Version: 1.0\r\n";
		if(!empty($_FILES))
		{
		 	$err_files="";
			$header.="Content-Type: multipart/mixed; boundary=\"grensje\"\r\n\r\n";
			$body="--grensje\r\nContent-Type: ".getstring($_POST['format'])."; charset=\"".getcharset($_POST['charset'])."\"\r\n\r\n";
			$body.=$_POST['msg']."\r\n\r\n";
			if(($num_files=count($_FILES))<=$max_atts)
			{
				while(list($key,$val)=each($_FILES))
				{
					if(empty($_FILES[$key]['name']))
					{
						$err_files.="<li>U hebt uploadveld ".$key." leeggelaten</li>\n";
						$illegal=1;
					}
					else if($_FILES[$key]['error']!=0)
					{
						$err_files.="<li>Er is een fout opgetreden bij het uploaden van ".$_FILES[$key]['name']."<br>".geterror($_FILES[$key]['error'])."</li>\n";
						$illegal=1;
					}
					else
					{
						if(!in_array($_FILES[$key]['type'],$allowed))
						{
							$err_files.="<li>Illegaal bestandtype in ".$_FILES[$key]['name'].": ".$_FILES[$key]['type']."</li>\n";
							$illegal=1;
						}
						else
						{
							$body.="--grensje\r\nContent-Type: ".$_FILES[$key]['type']."\r\n";
							$body.="Content-Disposition: attachment; filename=\"".$_FILES[$key]['name']."\"\r\n";
							$body.="Content-Transfer-Encoding: base64\r\n\r\n";
							$body.=base64_encode(file_get_contents($_FILES[$key]['tmp_name']))."\r\n\r\n";    
						}                
					}
				}
			}
			else
			{
				$err_files.="<li>Meer bestanden geupload dan toegestaan (".$num_files." tegenover ".$max_atts." toegestane bestanden)</li>\n";
				$illegal=1;
			}
			$body.="--grensje--";
		}
	    else
	    $header.="Content-Type: ".getstring($_POST['format'])."; charset=\"".getstring($_POST['charset'])."\"\r\n\r\n";
	    if(isset($illegal))
	    echo($err_files);
	    else
	    {
	        if(!mail($_POST['rec_name'],$_POST['subject'],$body,$header))
	        echo("<li>Er is een fout opgetreden bij het verzenden van het bericht</li>\n");
	        else
	        echo("<li>Bericht verzonden</li>\n");
		}
	}
}

?>
<html>
<head>
<script language="JavaScript">

var counter=0;
var dis=0;
var max=<?php echo($max_atts); ?>;
var fileArr=new Array();

function addFile()
{
	if(dis<max)
	{
		document.getElementById('lijst').innerHTML+="<span id='"+counter+"'><input type='file' name='input"+counter+"'><input type='button' value='x' onclick=\"javascript:delFile("+counter+")\"><br></span>";
		counter++;
		dis++;
	}
	else
	alert("U mag maximaal "+max+" bestanden uploaden");
}

function delFile(id)
{
	document.getElementById(id).innerHTML="";
	fileArr[id]=null;
	dis--;
}

</script>
</head>
<body>
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>" enctype="multipart/form-data">
<table>
  <tr>
    <td>Uw naam </td>
    <td>:</td>
    <td><input name="send_name" type="text" id="send_name" /></td>
  </tr>
  <tr>
    <td>Uw e-mailadres </td>
    <td>:</td>
    <td><input name="send_mail" type="text" id="send_mail" /></td>
  </tr>
  <tr>
    <td>Naar</td>
    <td>:</td>
    <td><input name="rec_name" type="text" id="rec_name" /></td>
  </tr>
  <tr>
    <td>Onderwerp</td>
    <td>:</td>
    <td><input name="subject" type="text" id="subject" /></td>
  </tr> 
  <tr>
    <th colspan="3">Bericht</th>
  </tr>
  <tr>
    <td colspan="3"><div align="center">
      <textarea name="msg" cols="35" rows="5" id="msg"></textarea>
    </div></td>
  </tr>
  <tr>
    <td colspan="3" align="center"><a id="hyper" href="javascript:addFile()">Bijlageveld toevoegen</a></td>
  </tr>
  <tr>
    <td colspan="3" align="center"><div id='lijst'></div></td>
  </tr>
  <tr>
    <th colspan="3">Formaat</th>
  </tr>
  <tr>
    <td colspan="3"><input name="format" type="radio" value="0" checked="checked" />
      Gewone tekst </td>
  </tr>
  <tr>
    <td colspan="3"><input name="format" type="radio" value="1" />
      HTML</td>
  </tr>
  <tr>
    <th colspan="3">Tekenset</th>
    </tr>
  <tr>
    <td colspan="3"><input name="charset" type="radio" value="0" checked="checked" /> 
      us-ascii</td>
  </tr>
  <tr>
    <td colspan="3"><input name="charset" type="radio" value="1" /> 
      utf-8</td>
  </tr>
  <tr>
    <td colspan="3"><div align="center">
      <input type="reset" name="Reset" value="Opnieuw" />
      <input type="submit" name="Submit2" value="Versturen" />
    </div></td>
  </tr>
</table>
</form>
</body>
</html>

[code]

Reacties

0
Nog geen reacties.