https://github.com/auscay/automated-email
This app allows users to schedule emails to be sent at future dates and times using PHP and MySQL.
https://github.com/auscay/automated-email
cronjob mysql php phpdotenv phpmailer
Last synced: 7 months ago
JSON representation
This app allows users to schedule emails to be sent at future dates and times using PHP and MySQL.
- Host: GitHub
- URL: https://github.com/auscay/automated-email
- Owner: auscay
- Created: 2024-09-13T23:28:17.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-09-17T20:33:53.000Z (over 1 year ago)
- Last Synced: 2025-07-03T23:35:39.102Z (8 months ago)
- Topics: cronjob, mysql, php, phpdotenv, phpmailer
- Language: PHP
- Homepage:
- Size: 23.4 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Email Scheduling and Notification System
This project is a simple **Email Scheduling and Notification System** built using **PHP**, **MySQL**, and **PHPMailer**. Users can schedule emails to be sent at a future date and time. The system checks for pending emails periodically using a cron job and sends them automatically.
## Features
- **User Authentication**: Users can sign up, log in, and access a personalized dashboard.
- **Email Scheduling**: Users can schedule emails to be sent at a specific future date and time.
- **Automated Email Sending**: A cron job checks the database every minute for pending emails and sends them using PHPMailer.
- **Failed Emails Handling**: The system retries failed emails and logs the status of each email.
- **PHP Sessions**: Protects certain pages (like the dashboard) by ensuring only logged-in users can access them.
## Prerequisites
Before running the project, make sure you have the following installed:
- PHP (>=7.3)
- MySQL
- Composer (for dependency management)
- PHPMailer (installed via Composer)
## Installation
### 1. Clone the Repository
```bash
git clone https://github.com/yourusername/email-scheduling-app.git
cd email-scheduling-app
```
### 2. Install Dependencies
#### Make sure you have Composer installed, then run:
```bash
composer install
```
#### This will install PHPMailer and other dependencies.
### 3. Create the .env File
#### Create a .env file in the project root and define your sensitive configurations:
```bash
DB_HOST=your_db_host
DB_NAME=your_db_name
DB_USER=your_db_user
DB_PASSWORD=your_db_password
SMTP_HOST=smtp.yourmailprovider.com
SMTP_PORT=587
SMTP_USER=your_email@domain.com
SMTP_PASS=your_email_password
```
### 4. Setup the Database
#### Create the MySQL database and import the SQL schema:
```sql
CREATE DATABASE email_scheduler;
USE email_scheduler;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(255) NOT NULL,
email VARCHAR(255) NOT NULL,
password VARCHAR(255) NOT NULL
);
CREATE TABLE scheduled_emails (
email_id INT AUTO_INCREMENT PRIMARY KEY,
recipient_email VARCHAR(255) NOT NULL,
subject VARCHAR(255) NOT NULL,
body TEXT NOT NULL,
scheduled_time DATETIME NOT NULL,
status ENUM('pending', 'sent', 'failed') DEFAULT 'pending',
attempts INT DEFAULT 0
);
```
### 5. Configure Database Connection
#### Edit the config/db.php file to load the environment variables using the vlucas/phpdotenv package.
```php
load();
class Dbh {
protected function connect() {
$dsn = 'mysql:host=' . $_ENV['DB_HOST'] . ';dbname=' . $_ENV['DB_NAME'];
try {
$pdo = new PDO($dsn, $_ENV['DB_USER'], $_ENV['DB_PASSWORD']);
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $pdo;
} catch (PDOException $e) {
die('Connection failed: ' . $e->getMessage());
}
}
}
```
### 6. Run the Application
#### Serve the PHP application locally (or on your preferred server). If using PHP’s built-in server, run:
```bash
php -S localhost:8000
```
#### Then, open http://localhost:8000 in your browser.
### 7. Setup Cron Job for Email Sending
##### Set up a cron job to run every minute to process scheduled emails:
###### 1. Open the crontab editor:
```bash
crontab -e
```
###### 2. Add the following line to execute the email sending script every minute:
```bash
* * * * * /usr/bin/php /path/to/project/includes/send_email.inc.php
```
##### Make sure the path to your PHP binary and project directory is correct.
## Usage
- **Sign up:** Create an account on the signup page.
- **Login:** Log in to your account and access the dashboard.
- **Schedule an Email:** Enter the recipient's email, subject, body, and scheduled time.
- **View Scheduled Emails:** Check the dashboard for a list of all scheduled and sent emails.
- **Automated Sending:** The system will automatically send emails when their scheduled time is reached.
## File Structure
```bash
project-root/
│
├── .env
├── .gitignore
├── composer.json
├── composer.lock
├── config.php
├── index.php
├── project.sql
├── README.md
│
├── config/
│ └── db.php
│
├── controllers/
│ ├── login-contr.php
│ ├── schedule_email-contr.php
│ └── signup-contr.php
│
├── includes/
│ ├── login.inc.php
│ ├── logout.inc.php
│ ├── schedule_email.inc.php
│ ├── send_email.inc.php
│ └── signup.inc.php
│
├── models/
│ ├── login-model.php
│ ├── schedule_email-model.php
│ └── signup-model.php
│
├── cron/
│ └── send_email.php
│
└── views/
├── dashboard.php
├── login.php
├── schedule_email.php
└── signup.php
```
## Future Enhancements
- Add functionality for recurring email schedules.
- Implement a more robust error logging mechanism.
- Implement email templates for better customization.
## Technologies Used
- **PHP:** Backend language
- **MySQL:** Database to store users and email schedules
- **PHPMailer:** To handle email sending
- **Composer:** PHP dependency management
- **Dotenv:** For managing environment variable
## Contributions
Contributions are welcome! Feel free to submit a pull request or open an issue.