Сервер Linux: Отправить почту моим пользователям

Я довольно новичок в создании серверных сценариев и заданий, которые сервер выполняет каждый день.

Моя проблема заключается в следующем:

Я хочу отправить электронное письмо своим пользователям с напоминанием о конкретной работе, которую они должны выполнить.

Моя идея:

База данных -> собрать всех пользователей, которых нужно уведомить, и вставить их в таблицу notify_user

Скрипт -> найти всех пользователей и отправить им почту

Скрипт -> Удалить все из таблицы

Этот сценарий будет запускаться в определенное время каждый день, например, каждые 24 часа.

Как я уже говорил ранее, я не очень заинтересован в том, как настроить такой скрипт.

Мой сервер — это сервер Ubuntu, а мое приложение — программа PHP.

Кто-нибудь знает, как мне этого добиться, или знает, где я могу найти документацию по этому вопросу, поскольку я не смог найти ничего, что решило бы эту проблему.

1

Решение

Если учесть, что вы знаете, как заполнить таблицу notify_user, то это мои шаги, чтобы воспроизвести образец решения для вас. Я сделал это на своем VPS-сервере с запущенным демоном sendmail.

# mysql -u root -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 167
Server version: 5.5.40-0ubuntu0.14.04.1 (Ubuntu)

Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>  create database stack_mail_db;
Query OK, 1 row affec`enter code here`ted (0.05 sec)
mysql> grant all privileges on stack_mail_db.* to 'stack_mail_usr'@'localhost' identified by 'stack_mail_pass';
Query OK, 0 rows affected (0.11 sec)
mysql> use stack_mail_db;
Database changed
mysql> create table notify_user( id int not null auto_increment primary key, user_name tinytext, user_email tinytext );
Query OK, 0 rows affected (0.28 sec)

После создания этого образца базы данных мы должны заполнить его как минимум двумя пользователями (для тестирования) с рабочими электронными письмами. Я изменил здесь фактические электронные письма, которые я использовал.

mysql> insert notify_user (user_name, user_email) values ('test1', '[email protected]');
Query OK, 1 row affected (0.18 sec)

mysql> insert notify_user (user_name, user_email) values ('test2', '[email protected]');
Query OK, 1 row affected (0.03 sec)

Теперь мы должны написать скрипт, который получает эти данные и отправляет электронные письма:

# vim cron_email.php
<?php
$host = 'localhost';
$user = 'stack_mail_usr';
$pass = 'stack_mail_pass';
$dbname = 'stack_mail_db';

$conn = new mysqli($host, $user, $pass, $dbname);

if ($conn->connect_error) {
trigger_error('DB connection failed: ' . $conn->connect_error, E_USER_ERROR);
}

$query = 'select * from notify_user';

$res = $conn->query($query);

if ($res === false) {
trigger_error('Failed query: ' . $query . ' Error: ' . $conn->error, E_USER_ERROR);
}

$headers = 'From: [email protected]' . "\r\n" .
'Reply-To: [email protected]' . "\r\n" .
'X-Mailer: PHP/' . phpversion();
$res->data_seek(0);
while ($row = $res->fetch_assoc()) {
$to = $row['user_email'];
$subject = 'Notification for ' . $row['user_name'];
$message = 'Hello ' . $row['user_name'];
$mail = mail($to, $subject, $message, $headers);
if ($mail) {
$conn->query('delete from notify_user where id=' . $row['id']);
} else {
echo "Email failed\n";
}
}

Теперь пришло время поместить этот скрипт в cron:

# crontab -e
0 0 * * * php -f /path/to/cron_email.php

Это будет запускать ваш сценарий ровно каждую полночь. Если вы хотите установить более конкретный час, посмотрите этот урок:
http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

Надеюсь, это поможет ^)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]