Я использую веб-сервер с контактной формой, которая запускает php-скрипт для отправки сообщения в локальную учетную запись на сервере, и я хочу получать уведомления в своей обычной учетной записи электронной почты, когда я получаю новые сообщения.
Я мог бы получать уведомление по электронной почте или просто отправлять электронные письма прямо в мою учетную запись, но это было бы слишком много: я просто хочу, чтобы уведомление «у вас новая почта» отправлялось на мою электронную почту каждый раз, когда в папке входящих сообщений меняется с 0 непрочитанных сообщений на 1 .
Google хоронит меня в документации по sendmail, но до сих пор ничего не может найти об этом.
Любые идеи?
Для этого я использую файл .forward.
ПЛЮСЫ: очень просто.
МИНУСЫ: 1 сообщение "ping" на каждое полученное письмо. Так что, если я получу 5 писем до проверки, я получу 5 пингов на другой почтовый ящик. Это можно решить, используя сценарий, такой как send_notification_if_no_new_mails ().
.forward файл:
\username
|"echo 'New email just arrived.' | mailx -s 'new message on the server' primary.email@example.com"
Первая строка - это ваша локальная учетная запись, которой предшествует обратная косая черта для предотвращения зацикливания. Это обеспечивает местную доставку. Вторая строка выполняет сценарий. В этом случае он напрямую вызывает mailx, чтобы отправить сообщение ping. Вместо этого вы можете запустить сценарий, похожий на ваш send_notification_if_no_new_mails (), чтобы ограничить отправленные эхо-запросы.
Вероятно, вы захотите написать какую-нибудь задачу cron.
например. вы можете написать что-нибудь на Python или PHP, которое запускается каждую минуту, входит в почтовый ящик с помощью IMAP, проверяет, изменился ли размер ожидающего сообщения, и, если да, отправляет вам уведомление по электронной почте.
Чтобы Sendmail делал это изначально, будет намного сложнее.
В стороне> почему бы вам просто не отправить электронное письмо из контактной формы как в локальную, так и в реальную учетную запись?
Вам нужно написать программу, похожую на biff, например xbiff или xbiff2. Вы должны записать следующие состояния: все прочитано, непрочитанное письмо не отправлено, непрочитанное письмо отправлено.
Итак, теперь вам нужно написать сценарий, запускаемый cron каждые 30 минут, который проверяет ваш почтовый ящик (через POP3, IMAP или даже напрямую) и запрашивает новую почту. Если существует новое письмо, вы должны знать, отправили ли вы письмо с уведомлением или нет. Если у вас есть новая почта и вы не отправили уведомление, отправьте уведомление и запишите факт в файл «флаг». Если у вас есть новая почта и файл существует, не отправляйте электронную почту. Если нового электронного письма нет, а файл существует, сотрите его.
Если кому-то интересно, вот базовый пример с кодом, который я включил в свой скрипт контактной формы .php, который, вызывая mail -f /var/mail/www-data -e
, делает то, что хочу. Не совсем то решение, которое я искал, но те же результаты:
Базовая контактная форма и почтовый скрипт:
<?php
require_once 'send_notification_if_no_new_mails.php';
if (isset($_POST['subject'])&&isset($_POST['message'])){
send_notification_if_no_new_mails();
mail("www-data",$_POST['subject'],$_POST['message']);
}
?>
<!doctype html><html>
<head><title>contact form</title></head>
<body><form method='post'>Subject:<input name='subject' type='text' /><br />
<textarea name='message'>Type here your message.</textarea>
<input type='submit' value='send'/></form></body>
</html>
Функция проверки и отправки уведомления при необходимости:
<?php
function send_notification_if_no_new_mails(){
exec('mail -f /var/mail/www-data -e',$output,$return_var);
if ($return_var=='0') {
/* There's already new mail. Do not send notification. */
return 0;
}
/* There is no new mail but there is going to be now -> Send notification */
$email="myemail@gmail.com";
$subject="New message from your webapp";
$msg = "You have a new message from your webapp's contact form";
$msg .= PHP_EOL.PHP_EOL;
/* Common Headers */
$time = time();
$now = (int)(date('Y',$time).date('m',$time).date('j',$time));
$headers = 'From: SYNAPP mailer <noreply@mywebapp.com>'.PHP_EOL;
$headers .= 'Reply-To: noreply <noreply@mywebapp.com>'.PHP_EOL;
$headers .= 'Return-Path: noreply <noreply@mywebapp.com>'.PHP_EOL;
$headers .= "Message-ID:<".$now." admin@".$_SERVER['SERVER_NAME'].">".PHP_EOL;
$headers .= "X-Mailer: PHP v".phpversion().PHP_EOL;
$headers .= 'MIME-Version: 1.0'.PHP_EOL;
$headers .= "Content-Type: text/plain; charset=\"utf-8\"".PHP_EOL;
mail($email, $subject, $msg, $headers);
return 1;
}
?>