PHP mailing list script

The script bellow will add or remove emails from users to a file, so that databases are not required. A tool to send emails to the list is also available. You may get it in the download page for this script.

As privacy in an email list is important, each time source code is requested here, a different file named "emaillist-XXXXXXXXXX.txt" will be assigned to the file where emails will be stored. The code "XXXXXXXXXX" is composed by letters and numbers. Users will be unable to discover this code. The file may be saved in a different location within the server. The first time an email is added to the list, a file with the above name will be created. In case it is not possible to create the file, a message is shown. In those cases the webmaster must check permissions in the directory to allow creating files (or just create a file with corresponding name and check its permissions).

The code shown in this page is divided into three parts:
  • the main body of the script
  • two functions
Many comments has been included in the code, so that we hope you are able to unsdertand how it works. Additionaly, by clicking the PHP functions, the PHP manual will be requested.

NOTE: when requesting source code of this script here, apart from the code explained bellow, a second code is provided which allows to send emails to the mailing list by using a form. This second script is described here.

emaillist.php  |   Download source code here
<?php
/*
Email list script
by phptutorial.info
*/

// to avoid showning errors (change to 1 to show them). For security
error_reporting(0);

// if info is posted, show the form and die
// the form is in the bottom of the page
if (!$_POST){print_form();die();}

// when info is posted you will be here
?>

<html>
<head>
<title>My mailing list</title>
</head>
<body bgcolor=FFFFFF>
<?php

// GET EMAIL
$email=$_POST["email"];
// To avoid problems, only lower case is used
$email=strtolower($email);
// Check whether email is correct by using a function
// function requires the email address and the error message
check_email ($email, "Error: email is not valid.");


// GET VALUE FOR action : subc (subscribe) or unsubc (unsubscribe)
$action=$_POST["action"];

// this is the file with the info (emails)
// When downloading the source code here, a new name for this file
// will be generated (p.e.: emaillist-2ax1fd34rfs.txt), so users will be unable to find it
$file = "emaillist-XXXXXXXXXX.txt";

// lets try to get the content of the file
if (file_exists($file)){
// If the file is already in the server, its content is pasted to variable $file_content
$file_content=file_get_contents($file);
}else{
// If the file does not exists, lets try to create it
// In case file can not be created (probably due to problems with directory permissions),
// the users is informed (the first user will be the webmaster, who must solve the problem).
$cf = fopen($file, "w") or die("Error: file does not exits, and it can not be create.
<BR>Please check permissions in the directory or create
a file with coresponding name.");
fputs($cf, "Mailing list subscribers\n");
fclose($cf);
}

// IF REQUEST HAS BEEN TO SUBSCRIBE FROM MAILING LIST, ADD EMAIL TO THE FILE
if ($action=="subc"){
// check whether the email is already registered
if(strpos($file_content,"<$email>")>0){
die("Error: your email is already included in this mailing list");
}
// write the email to the list (append it to the file)
$cf = fopen($file, "a");
fputs($cf, "\n<$email>"); // new email is written to the file in a new line
fclose($cf);
// notify subscription
print "Your email has been added to our mailing list.<br>Thanks for joining us.";
}
// IF REQUEST HAS BEEN TO UNSUBSCRIBE FROM MAILING LIST, REMOVE EMAIL FROM THE FILE
if ($action=="unsubc"){
// if email is not in the list, display error
if(strpos($file_content,"<$email>")==0){
die("Error: your email is not included in this mailing list");
}
// remove email from the content of the file
$file_content=preg_replace ("/\n<$email>/","",$file_content);
// print the new content to the file
$cf = fopen($file, "w");
fputs($cf, $file_content);
fclose($cf);
// notify unsubscription
print "Your email has been removed from our mailing list. ";
}

?>
</body>
</html>
<?php
// THIS FUNCTION WILL CHECK WHETHER AN EMAIL IS CORRECT OR NOT
// FIRST, BASIC ARCHITECTURE IS CHECKED
// THEM, EXISTANCE OF THE EMAIL SERVER IS CHECKED
// If email is not correct, the error message is shown and page dies
function check_email ($email, $message){
// check if email exists
if ($email==""){die($message);}
// check whether email is correct (basic checking)
$test1=strpos($email, "@"); //value must be >1
$test2=strpos(substr($email,strpos($email,"@")), "."); //value must be >1
$test3=strlen($email); //value must be >6
$test4=substr_count ($email,"@"); //value must be 1
if ($test1<2 or $test2<2 or $test3<7 or $test4!=1){die($message);}
// check whether email is correct (advance checking)
// extracts whatever is after "@" to variable $email_server
$email_server=substr($email,strpos($email, "@")+1);
// Check DNS records (0 => the server exists; 1=> the server does not exist)
if (checkdnsrr($email_server)!=1){die ($message);}
}
// THIS FUNCTION WILL SHOW THE FORM
// MODIFY IT AS REQUIRED
function print_form(){
?>

<html>
<head>
<title>My mailing list</title>
</head>
<body style="background-color: rgb(255, 255, 255);">
<center>
<div style="text-align: center;"></div>
<form action="index2.php" method="post">
<div style="text-align: center;"> </div>
<table>
<tr>
<td>
<div style="text-align: center;">
<big style="font-weight: bold;">Join my mailing list </big><br>
</div>
&nbsp;<input name="email" size="30" type="text"> <br>
<div style="text-align: center;">
<input name="action" value="subc" checked="checked" type="radio">Subscribe
<input name="action" value="unsubc" selected="" type="radio">Unsubscribe
<br>
</div>
<div style="text-align: center;">
<input value="Submit" type="submit">
</div>
</td>
</tr>
</table>
</form>
<!-- you may remove next line, but consider maintaining it -->
<font size="2">Script provided by <a href="http://www.phptutorial.info/">PhpTutorial.info</a>.
</font></center>
</body>
</html>

<?
}
?>

Rate Our Program

We have tried to create a copy and paste script (place the code in a page within your server and it will work).
Them you may add a link to the new page in your regular pages. You may also copy the form to your page and direct it to your page.



PhpTutorial.info