# Email Scheduler - Aplikasi Kirim Email Terjadwal Aplikasi web untuk mengirim email terjadwal dengan attachment menggunakan PHP dan PHPMailer. ## 🚀 Fitur - ✉️ Kirim email dengan custom nama dan email pengirim - ⏰ Jadwalkan pengiriman email di waktu tertentu - 📎 Dukungan attachment (PDF, DOC, DOCX, XLS, XLSX, JPG, PNG, ZIP) - 📧 Menggunakan SMTP Hostinger - 🎨 Interface modern dan responsif - 📝 Log aktivitas pengiriman email ## 📋 Persyaratan Sistem - PHP 7.4 atau lebih tinggi - Ekstensi PHP: `openssl`, `mbstring` - Akses ke server SMTP Hostinger - Cron job (untuk email terjadwal) ## 🔧 Instalasi ### 1. Download PHPMailer Ada dua cara untuk menginstal PHPMailer: #### Cara 1: Menggunakan Composer (Direkomendasikan) ```bash composer require phpmailer/phpmailer ``` Kemudian ubah pada file `send-email.php` dan `cron-send-emails.php`: ```php // Uncomment baris ini require 'vendor/autoload.php'; // Comment baris-baris ini // require 'PHPMailer/src/Exception.php'; // require 'PHPMailer/src/PHPMailer.php'; // require 'PHPMailer/src/SMTP.php'; ``` #### Cara 2: Manual Download 1. Download PHPMailer dari: https://github.com/PHPMailer/PHPMailer/archive/master.zip 2. Extract file zip 3. Buat folder `PHPMailer` di root project 4. Copy folder `src` dari hasil extract ke dalam folder `PHPMailer` Struktur folder harus seperti ini: ``` project-folder/ ├── PHPMailer/ │ └── src/ │ ├── Exception.php │ ├── PHPMailer.php │ └── SMTP.php ├── email-scheduler.html ├── send-email.php ├── cron-send-emails.php └── README.md ``` ### 2. Buat Folder Upload ```bash mkdir uploads chmod 755 uploads ``` ### 3. Konfigurasi SMTP File `send-email.php` dan `cron-send-emails.php` sudah dikonfigurasi dengan: - SMTP Host: `mail.hostinger.com` - Username: `sunaryono@ibei.ac.id` - Password: `Sunaryono123!@#` - Port: `465` (SSL) **PENTING:** Untuk keamanan, sebaiknya pindahkan konfigurasi ke file terpisah: Buat file `config.php`: ```php ``` Lalu include di awal `send-email.php` dan `cron-send-emails.php`: ```php require 'config.php'; ``` ### 4. Setup Cron Job (untuk email terjadwal) Tambahkan cron job untuk menjalankan script setiap menit: ```bash crontab -e ``` Tambahkan baris berikut: ``` * * * * * /usr/bin/php /path/to/your/project/cron-send-emails.php ``` Ganti `/path/to/your/project/` dengan path lengkap ke project Anda. ## 📖 Cara Penggunaan ### 1. Kirim Email Langsung 1. Buka `email-scheduler.html` di browser 2. Isi form dengan data yang diperlukan: - Nama Pengirim - Email Pengirim - Nama Penerima - Email Penerima - Subjek Email - Pesan Email - Jadwal Kirim (set ke waktu sekarang atau masa lalu) - Attachment (opsional) 3. Klik "Kirim Email" 4. Email akan langsung dikirim ### 2. Jadwalkan Email 1. Buka `email-scheduler.html` di browser 2. Isi form dengan data yang diperlukan 3. Set **Jadwal Kirim** ke waktu di masa depan 4. Klik "Kirim Email" 5. Email akan disimpan dan dikirim otomatis pada waktu yang dijadwalkan ### 3. Menjalankan Cron Job Manual (Testing) Untuk testing, Anda bisa menjalankan cron job secara manual: ```bash php cron-send-emails.php ``` ## 📁 Struktur File ``` project/ ├── PHPMailer/ # Library PHPMailer │ └── src/ ├── uploads/ # Folder untuk attachment (dibuat otomatis) ├── email-scheduler.html # Form HTML ├── send-email.php # Script PHP untuk kirim email ├── cron-send-emails.php # Cron job untuk email terjadwal ├── scheduled_emails.json # Database email terjadwal (dibuat otomatis) ├── email_log.txt # Log aktivitas (dibuat otomatis) └── README.md # Dokumentasi ``` ## 🔒 Keamanan 1. **Jangan commit password ke Git:** ```bash # Tambahkan ke .gitignore config.php scheduled_emails.json email_log.txt uploads/ ``` 2. **Batasi akses folder uploads:** ```apache # Tambahkan di .htaccess Options -Indexes ``` 3. **Validasi input:** Aplikasi sudah memiliki validasi dasar, tapi selalu perbarui sesuai kebutuhan 4. **HTTPS:** Gunakan HTTPS untuk melindungi data saat transmisi ## 🐛 Troubleshooting ### Email tidak terkirim 1. **Cek kredensial SMTP:** - Pastikan username dan password benar - Login ke email untuk verifikasi 2. **Cek port dan enkripsi:** - Port 465 untuk SSL - Port 587 untuk TLS - Hostinger biasanya menggunakan 465 (SSL) 3. **Cek log error:** - Lihat file `email_log.txt` - Enable debug mode di PHPMailer: ```php $mail->SMTPDebug = SMTP::DEBUG_SERVER; ``` 4. **Firewall/Whitelist:** - Pastikan IP server tidak diblokir - Cek di Hostinger control panel ### Attachment tidak terkirim 1. **Cek ukuran file:** Maksimal 10MB 2. **Cek format file:** Hanya format yang diizinkan 3. **Cek permission folder:** `chmod 755 uploads/` ### Cron job tidak jalan 1. **Cek path PHP:** ```bash which php ``` 2. **Cek syntax crontab:** ```bash crontab -l ``` 3. **Cek log cron:** ```bash tail -f /var/log/cron ``` ## 📝 Format File yang Didukung Attachment yang didukung: - PDF (.pdf) - Word (.doc, .docx) - Excel (.xls, .xlsx) - Gambar (.jpg, .jpeg, .png) - Archive (.zip) Maksimal ukuran: **10MB** ## 🔄 Alternatif Port SMTP Jika port 465 bermasalah, coba gunakan port 587 dengan TLS: ```php define('SMTP_PORT', 587); define('SMTP_SECURE', PHPMailer::ENCRYPTION_STARTTLS); ``` ## 📧 Testing Email Untuk testing, gunakan email testing seperti: - Mailtrap.io - MailHog - Atau kirim ke email sendiri ## 🆘 Support Jika mengalami masalah: 1. Cek log error di `email_log.txt` 2. Enable debug mode PHPMailer 3. Cek dokumentasi PHPMailer: https://github.com/PHPMailer/PHPMailer 4. Hubungi support Hostinger jika masalah SMTP ## 📜 License MIT License - Free to use and modify ## 👨‍💻 Author Created with ❤️ for easy email scheduling --- **CATATAN PENTING:** - Jangan share kredensial SMTP ke publik - Gunakan environment variables untuk production - Selalu backup data sebelum update - Test di development environment terlebih dahulu