<?php
/* SQL CODE:

CREATE TABLE IF NOT EXISTS `dalanmail` (
  `email` varchar(80) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;

*/

$settings = array();

////// Settings


$settings['mysqlhost'] = ""; // mysql host
$settings['mysqluser'] = ""; // mysql user
$settings['mysqlpass'] = ""; // Mysql pass
$settings['mysqldatb'] = "";; // Mysql database

$settings['from'] = ""; // Webmaster email
$settings['pass'] = ""; // Webmaster password to send mails


//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////// Functions
function valid_email($email){
//check email format
	if (filter_var($email, FILTER_VALIDATE_EMAIL) == $email){
		//check if the domain has MX entries
		$aux = explode('@',$email);
		return checkdnsrr($aux[1],'MX');
	}
	return false;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

$mysqlconnection = mysql_connect($settings['mysqlhost'], $settings['mysqluser'], $settings['mysqlpass']);
$mysqlselectdb = mysql_select_db($settings['mysqldatb'], $mysqlconnection);

if(!$mysqlconnection){
	echo 'Error: could not connect to database!<br/>';
	exit;
}
if(!$mysqlselectdb){
	echo 'Error: could not select database!<br/>';
	exit;
}

if(isset($_GET['exec']) && $_GET['exec'] == "sendmail"){
	if($_SERVER['REQUEST_METHOD'] == "POST"){
		if($_POST['pass'] == $settings['pass']){
			$getqry = "
				SELECT *
				FROM dalanmail
			";
			if($res = mysql_query($getqry)){
				if(mysql_num_rows($res) == 0){
					echo 'Noone is subscribed!<br/>';
				}
				else
				{
					while($row = mysql_fetch_assoc($res)){
						mail($row['email'], htmlentities($_POST['subject']), $_POST['message'], 'Content-type: text/html; charset=iso-8859-1');
					}
					echo 'Mail was send!<br/>';
				}
			}
			else
			{
				echo 'Error: Mysql error!<br/>';
			}
		}
		else
		{
			echo 'Password is not correct!<br/>';
		}
	}
	else
	{
		?>
		<h1>Send mail</h1><br/>
		<form action="?exec=sendmail" method="post">
		Subject: <input type="text" name="subject"/><br/>
		Content:<br/>
		<textarea cols="50" rows="8" name="message"></textarea><br/>
		Password: <input type="password" name="pass"/>
		<input type="submit" value="Send"/>
		</form>
		<?php
	}
}
else
{
	if($_SERVER['REQUEST_METHOD'] == "POST"){
		if($_POST['subscribe'] == "subscribe"){
			if(valid_email($_POST['email']) == true){
				$postqry = "
							INSERT INTO dalanmail
							(
								email
							)
							VALUES
							(
								'". mysql_real_escape_string($_POST['email']) ."'
							)
				";
				if(mysql_query($postqry)){
					echo 'Subscribed!<br/>';
				}
				else
				{
					echo 'Error: Mysql error<br/>';
				}
			}
			else
			{
				echo 'Email adres is not valid.<br/>';
			}
		}
		elseif($_POST['subscribe'] == "unsubscribe"){
			if(valid_email($_POST['email']) == true){
				$deleteqry = "
							DELETE FROM dalanmail
							WHERE email = '". mysql_real_escape_string($_POST['email']) ."'";
				if(mysql_query($deleteqry)){
					if(mysql_affected_rows() == 0){
						echo 'Email adress does not match to our database!<br/>';
					}
					else
					{
						echo 'You where deleted from our mailing list!<br/>';
					}
				}
				else
				{
					echo 'Error: Mysql error';
				}
			}
			else
			{
				echo 'Your email adress was not valid.';
			}
		}
		else
		{
			echo 'Not an valid post method?<br/>';
		}
	}
	else
	{
		?>
		<form action="" method="post">
		Email adress: <input type="text" name="email"/>
		<input type="radio" name="subscribe" value="subscribe" checked="checked"/>Subscribe |
		<input type="radio" name="subscribe" value="unsubscribe"/>Unsubscribe<br/>
		<input type="submit" value="(un)subscribe!"/><br/>
		</form>
		<?php
	}
}
?>


Ziehier mijn eigen nieuwsletter systeem, heel simpel, toch weer een leuke uitdaging.
Ik denk, laat ik em eerst maar even keuren.

Nou, wat vinden jullie ervan?

Edit: voorbeeld:
http://prive.alphenweer.nl/phphulp/dalanmail.php
En om mails te versturen:
http://prive.alphenweer.nl/phphulp/dalanmail.php?exec=sendmail

Wat ik nog ga doen is:
-from header zetten in de mail
-empty checks doen, helemaal vergeten (dom, dom dom dom!)
Kan helaas niet keuren.. Daar ben ik niet goed genoeg voor.. Maar wow wat is dit netjes! Niet te vergelijken met de rotzooi die ik er altijd van maak :O
ik zou eerder gebruik maken van swiftmailer oid, dan zit je altijd goed
Vincent Huisman op 24/10/2010 20:05:32

ik zou eerder gebruik maken van swiftmailer oid, dan zit je altijd goed


Ik zou geen 3Mb op een heel klein servertje neerzetten hoor.
Dus dit is vooral praktisch voor kleinere websites =)
Dalando De Zuil op 24/10/2010 20:45:44

[quote="Vincent Huisman op 24/10/2010 20:05:32"]
ik zou eerder gebruik maken van swiftmailer oid, dan zit je altijd goed


Ik zou geen 3Mb op een heel klein servertje neerzetten hoor.
Dus dit is vooral praktisch voor kleinere websites =)
[/quote]

Als je het doet doe het dan goed, bijna alles komt in de spaminbox via de standaard mail functie, tevens kap eens met die achterlijke namen 'dalanmail' doh.....

Verder heel even snel gekeken en zag er redelijk uit, eindelijk eens goede insprining, dacht dat je het nooit zou leren..

Heb je je wel eens verdiept in nieuwsbrieven? Het is heel iets anders dan een website, wist je bijvoorbeeld dat je een nieuwsbrief uit tabellen maakt en niet uit div's??

Mijn korte indruk

Waar staat je commentaar?
Waarom gebruik je mail? Als die 3mb al te veel is zou ik toch eens gaan kijken wat voor server/hosting pakket je hebt.
Scheiding verwerking/output? Je hebt je output (html) direct in je php staan. Stop het eerst in een variabele en laat het aan het einde zien. Dat maakt het ook beter te integreren.

Daarnaast, nieuwsbrief met alleen tekst is niet echt spannend. En alleen html is niet altijd te lezen. Dus eigenlijk moet je de plain text en de html versie meesturen.

Opmerking over checkdnsrr is ook wel handig:
5.3.0 This function is now available on Windows platforms.
Veel hosters draaien dit nog niet.


@Oetzie, wat is er mis met dalanmail? Je ziet wel vaker projecten waarbij de naam van de maker er in is verwerkt. Daar zie ik nog niet echt een probleem in. De nieuwsbrief module is ook een standaard naam, dit maakt het wat unieker.
Een hoop nested if- else'jes. Misschien werken met try, throw en catch?

Reageren