Acest articol explică cum să implementezi un sistem de trimitere automată a emailurilor multiple către o listă de destinatari, folosind WordPress și cron joburi externe. Sistemul permite configurarea notificărilor personalizate care se trimit automat în funcție de datele și orele setate.
Funcționalități ale Codului
Codul implementează următoarele funcționalități:
- Trimiterea automată de emailuri multiple: Emailurile sunt trimise către toți destinatarii dintr-o listă configurabilă.
- Notificare la încheierea lunii anterioare: Reamintire pentru pregătirea documentelor contabile necesare.
- Reminder pentru termenul-limită: Notificare despre apropierea datei scadente pentru transmiterea documentelor.
- Ultima notificare în ziua scadenței: Notificare finală care subliniază urgența trimiterii documentelor.
- Interfață de administrare ușor de utilizat: Posibilitatea de a adăuga, șterge sau edita destinatarii direct din WordPress.
- Integrare cu cron joburi externe: Asigură programarea exactă a notificărilor, indiferent de limitările serverului.
Detalii despre Funcționarea Codului
- Emailuri Multiple: Sistemul extrage toate firmele și emailurile dintr-o opțiune WordPress (
firme_emailuri_list
) și trimite emailuri personalizate fiecărei firme din listă. - Programare Automată: Funcțiile sunt conectate la acțiuni specifice (
send_end_of_previous_month_email
,send_upcoming_due_date_reminder
,send_last_chance_email
) care pot fi declanșate manual sau printr-un cron job extern. - Interfața de Administrare: Oferă o pagină dedicată în WordPress unde utilizatorii pot adăuga firme, șterge firme sau modifica lista destinatarilor fără a edita codul sursă.
Codul Complet
// Funcția pentru trimiterea mesajului cu încheierea lunii anterioare
function send_end_of_previous_month_email() {
$firme_emailuri = get_option('firme_emailuri_list', []);
if (!empty($firme_emailuri)) {
$months_ro = array(
'January' => 'Ianuarie',
'February' => 'Februarie',
'March' => 'Martie',
'April' => 'Aprilie',
'May' => 'Mai',
'June' => 'Iunie',
'July' => 'Iulie',
'August' => 'August',
'September' => 'Septembrie',
'October' => 'Octombrie',
'November' => 'Noiembrie',
'December' => 'Decembrie'
);
$last_month_english = date("F", strtotime("first day of last month"));
$last_month = $months_ro[$last_month_english];
foreach ($firme_emailuri as $entry) {
$firma_name = $entry['firma'];
$email = $entry['email'];
$message = "Stimată echipă $firma_name,\n\n" .
"Întrucât luna $last_month s-a încheiat, dorim să vă reamintim să pregătiți documentele contabile necesare pentru închiderea acesteia.\n\n" .
"Documentele trebuie transmise până la data de 09 a lunii următoare pentru a asigura o procesare eficientă.\n\n" .
"Vă mulțumim pentru colaborare!\n\nFirma Conta";
wp_mail($email, 'Informare Firma Conta', $message);
}
}
}
// Funcția pentru trimiterea reminderului cu privire la data scadentă
function send_upcoming_due_date_reminder() {
$firme_emailuri = get_option('firme_emailuri_list', []);
if (!empty($firme_emailuri)) {
foreach ($firme_emailuri as $entry) {
$firma_name = $entry['firma'];
$email = $entry['email'];
$message = "Bună ziua $firma_name,\n\n" .
"Vă reamintim că documentele contabile trebuie transmise până la data de 09 a lunii în curs.\n\n" .
"Dacă aveți întrebări, vă rugăm să ne contactați.\n\n" .
"Cu respect,\nFirma Conta";
wp_mail($email, 'Reminder Termen Contabilitate', $message);
}
}
}
// Funcția pentru trimiterea mesajului de ultimă oră
function send_last_chance_email() {
$firme_emailuri = get_option('firme_emailuri_list', []);
if (!empty($firme_emailuri)) {
foreach ($firme_emailuri as $entry) {
$firma_name = $entry['firma'];
$email = $entry['email'];
$message = "Bună ziua $firma_name,\n\n" .
"Astăzi este ultima zi pentru transmiterea documentelor contabile necesare. Vă rugăm să le trimiteți pentru a evita întârzierile.\n\n" .
"Cu respect,\nFirma Conta";
wp_mail($email, 'Ultimul Reminder Documente', $message);
}
}
}
// Hookuri pentru cron joburile separate
add_action('send_end_of_previous_month_email', 'send_end_of_previous_month_email');
add_action('send_upcoming_due_date_reminder', 'send_upcoming_due_date_reminder');
add_action('send_last_chance_email', 'send_last_chance_email');
// Adăugăm un meniu personalizat în zona de administrare
add_action('admin_menu', 'register_my_custom_menu_page');
function register_my_custom_menu_page() {
add_menu_page(
'Firme și Emailuri',
'Firme și Emailuri',
'manage_options',
'firme_emailuri',
'firme_emailuri_page',
'dashicons-email-alt2',
6
);
}
// Funcția pentru afișarea și gestionarea firmelor și emailurilor
function firme_emailuri_page() {
if (isset($_POST['add_firma'])) {
$firme_emailuri = get_option('firme_emailuri_list', []);
$firme_emailuri[] = array(
'firma' => sanitize_text_field($_POST['firma']),
'email' => sanitize_email($_POST['email'])
);
update_option('firme_emailuri_list', $firme_emailuri);
}
if (isset($_POST['delete_firma'])) {
$firme_emailuri = get_option('firme_emailuri_list', []);
unset($firme_emailuri[$_POST['index']]);
$firme_emailuri = array_values($firme_emailuri);
update_option('firme_emailuri_list', $firme_emailuri);
}
$firme_emailuri = get_option('firme_emailuri_list', []);
?>
<div class="wrap">
<h2>Adaugă o nouă firmă și email</h2>
<form method="post" action="">
<label for="firma">Nume firmă:</label>
<input type="text" id="firma" name="firma" required>
<br><br>
<label for="email">Adresă de email:</label>
<input type="email" id="email" name="email" required>
<br><br>
<input type="submit" name="add_firma" value="Adaugă firmă">
</form>
<h2>Lista firmelor și emailurilor</h2>
<table>
<tr>
<th>Firmă</th>
<th>Email</th>
<th>Acțiune</th>
</tr>
<?php foreach ($firme_emailuri as $index => $entry) : ?>
<tr>
<td><?php echo esc_html($entry['firma']); ?></td>
<td><?php echo esc_html($entry['email']); ?></td>
<td>
<form method="post" action="" style="display:inline;">
<input type="hidden" name="index" value="<?php echo $index; ?>">
<input type="submit" name="delete_firma" value="Șterge">
</form>
</td>
</tr>
<?php endforeach; ?>
</table>
</div>
<?php
}
function add_custom_admin_css($hook) {
if ('toplevel_page_firme_emailuri' === $hook) {
echo '<style>
.wrap {
font-family: Arial, sans-serif;
margin: 20px;
}
.wrap h2 {
font-size: 24px;
color: #333;
margin-bottom: 20px;
border-bottom: 2px solid #ccc;
padding-bottom: 10px;
}
form {
background-color: #f9f9f9;
padding: 20px;
border-radius: 8px;
box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
margin-bottom: 30px;
max-width: 600px;
margin-left: auto;
margin-right: auto;
}
label {
font-weight: bold;
margin-bottom: 5px;
display: block;
}
input[type="text"], input[type="email"] {
width: 100%;
padding: 10px;
font-size: 16px;
border: 1px solid #ccc;
border-radius: 4px;
margin-bottom: 15px;
}
input[type="submit"] {
background-color: #4CAF50;
color: white;
padding: 12px 20px;
border: none;
border-radius: 4px;
cursor: pointer;
font-size: 16px;
}
input[type="submit"]:hover {
background-color: #45a049;
}
table {
width: 100%;
border-collapse: collapse;
margin-top: 20px;
}
table th, table td {
padding: 12px;
text-align: left;
border-bottom: 1px solid #ddd;
}
table th {
background-color: #f2f2f2;
font-weight: bold;
}
table td {
background-color: #fff;
}
table tr:hover {
background-color: #f1f1f1;
}
form input[type="submit"] {
background-color: #f44336;
font-size: 14px;
padding: 8px 15px;
}
form input[type="submit"]:hover {
background-color: #e53935;
}
</style>';
}
}
add_action('admin_enqueue_scripts', 'add_custom_admin_css');
Configurarea Cron Joburilor Externe
Pentru a te asigura că emailurile sunt trimise la datele și orele dorite, este recomandat să utilizezi un cron job extern. Platforma cron-job.org este o soluție gratuită și ușor de configurat.
Pasul 1: Creează un Cont pe cron-job.org
- Înregistrează-te pe site-ul cron-job.org.
- Autentifică-te și creează un New Cron Job.
Pasul 2: Configurează URL-urile pentru fiecare acțiune
Adaugă URL-urile care declanșează funcțiile din cod. Exemple:
Pentru emailul cu încheierea lunii:
https://domeniu.ro/wp-cron.php?doing_wp_cron
Pentru reminderul de data scadentă:
https://domeniu.ro/wp-cron.php?doing_wp_cron
Pentru ultimul reminder:
https://domeniu.ro/wp-cron.php?doing_wp_cron
Pasul 3: Setează Programarea
- Configurează ora și frecvența pentru fiecare URL.
- Salvează modificările.
Concluzie
Implementarea acestui sistem oferă un mod eficient și automatizat de a gestiona notificările prin email pentru clienți și parteneri. Folosind un cron job extern, te asiguri că mesajele sunt trimise exact la timp, către toți destinatarii din listă, fără a depinde de limitările WordPress.
Acum poți utiliza acest sistem pentru a îmbunătăți comunicarea și organizarea firmei tale!