Если вы активно используете почту при общении с клиентами и коллегами, редкий день обходится без копий. Они являются неотъемлемой частью рабочей переписки. Поэтому многие клиенты, перебираясь на Омнидеск со старой доброй почты, часто спрашивали о поддержке Cc и Bcc. До появления этой функциональности мы получили 47 (!) просьб добавить её. Цифра внушительная, ведь о своих потребностях и вопросах в лучшем случае пишут 5-7% желающих.
Перед тем, как перейти к подробностям нашей реализации копий, давайте разберёмся, что они собой представляют.
Типы получателей письма
To : (кому ) - основной получатель письма.Cc : (копия, carbon copy ) - вторичные получатели письма, которым направляется копия. Они видят и знают о наличии друг друга.
Bcc : (скрытая копия, blind carbon copy ) - скрытые получатели письма, чьи адреса не показываются другим получателям.
Примеры использования копий
а. Пользователь обратился за помощью и попросил отправлять ответы как на рабочую, так и личную почту. Вы указываете его личный адрес в копии (Cc), чтобы он смог отвечать с любого адреса и в каждом из них видеть всю переписку.б. Клиент оплатил консалтинг/поддержку/разработку, и вы регулярно общаетесь с его сотрудниками. Вы добавляете его в копию (Cc), чтобы он получал все ваши ответы, мог в любой момент вклиниться в переписку и оценить качество предоставляемых вами услуг.
в. Руководитель хочет следить за общением поддержки с VIP-клиентами. В обращениях от этих клиентов руководитель добавляется в скрытую копию (Bcc), чтобы он всегда получал ваши ответы (с историей переписки).
Прелесть в том, что клиент не знает о «слежке», а руководитель может ответить лично вам и, к примеру, сделать замечание:)
г. Клиент обращается к вам, чтобы обсудить получение скидки и способы оплаты. Он сразу добавляет своего бухгалтера в копию (Cc), чтобы тот мог следить за ходом общения и принять эстафету в нужный момент.
Как мы реализовали поддержку копий?
Приведённые выше примеры описывают лишь некоторые сценарии, которые клиенты «продавали» нам, аргументируя необходимость поддержки копий на сервисе. Мы реализовали все стандартные моменты, но не забыли добавить и несколько полезных фишек. Рассмотрим всё по порядку.Базовая функциональность
1) Справа от названия поля «Получатель» мы разместили две ссылки для добавления копий - «Сс» и «Bcc».2) При нажатии на «Cc» появляется поле «Копия», и пропадает ссылка «Cc».
3) При нажатии на «Bcc» появляется поле «Скрытая копия», и пропадает ссылка «Bcc».
5) Когда сотрудник добавляет адрес в обычную копию (Cc) , его ответ отправляется на основной адрес из поля «Получатель» и на адрес из поля «Копия». В этом случае оба пользователя видят, что письмо было доставлено на два адреса. Каждый из них может ответить как сотруднику, так и сотруднику + другому пользователю.
6) Когда сотрудник добавляет адрес в скрытую копию (Bcc) , его ответ отправляется на основной адрес из поля «Получатель» и на адрес из поля «Скрытая копия». В этом случае основной пользователь видит, что письмо пришло только ему, поэтому его ответ может быть отправлен только сотруднику.
При этом пользователь из скрытой копии видит, кто был основным получателем, и может отправить письмо как сотруднику, так и сотруднику + основному получателю.
7) Поддержка копий работает и в обратном направлении. Если пользователь отправляет запрос (или новый ответ в текущую переписку) и добавляет другой адрес в Cc, мы автоматически прописываем этот адрес в поле «Копия», чтобы при ответе сотрудника письмо отправлялось на оба адреса.
Полезные фишки
8) Все изменения в полях «Получатель», «Копия» и «Скрытая копия» фиксируются в истории действий.9) Для каждого обращения мы запоминаем все адреса, которые указывались в полях «Получатель», «Копия» и «Скрытая копия». Поэтому после удаления адреса из поля его можно легко вернуть. Достаточно кликнуть в нужном поле, и мы предложим выбрать адрес из выпадающего списка.
10) Когда пользователь из скрытой копии отвечает сотруднику и основному пользователю, его письмо добавляется в обращение в виде обычного ответа. Если же он отвечает только сотруднику, тогда его письмо добавляется в обращение в качестве заметки , которая не видна основному пользователю (при просмотре переписки по обращению в своём аккаунте).
11) В правилах для входящих обращений мы добавили условие «Копия (Cc) обращения» , чтобы можно было отслеживать наличие определённого адреса (или домена) в копии и автоматически выполнять нужные действия.
12) Во всех типах правил появились два новых действия - «Добавить в копию» и «Добавить в скрытую копию» на случай, если требуется добавить адреса в копии, когда обращение соответствует условиям правила.
Одной из самых востребованных функций на сайте является форма заявки или заказа, данные из которой отправляются на почту владельцу сайта. Как правило такие формы являются простыми и состоят из двух трех полей для ввода данных. Как же создать такую форму заказа? Здесь потребуется использование языка разметки HTML и языка программирования PHP.
Язык разметки HTML сам по себе несложен, нужно всего лишь разобраться в том как и где ставить те или иные теги. С языком программирования PHP все немного сложнее.
Для программиста создать такую форму не составит труда, а вот HTML верстальщику может показаться сложным некоторые действия.
Создаем форму отправки данных в html
Первая строка будет следующей
Теперь соберем все вместе.
Теперь сделаем так, чтобы поля в форме стали обязательными для заполнения. Имеем следующий код:
Создаем файл, принимающий данные из HTML формы
Это будет файл с именем send.php
В файле на первом этапе нужно принять данные из пост массива. Для этого создаем две переменные:
$fio = $_POST["fio"];
$email = $_POST["email"];
Перед названиями переменных в php ставиться знак $, в конце каждой строки ставиться точка с запятой. $_POST это массив в который передаются данный из формы. В форме html при этом указан метод отправки method="post". Так, приняты две переменные из формы html. Для целей защиты своего сайта нужно провести эти переменные через несколько фильтров - функций php.
Первая функция преобразует все символы, которые пользователь попытается добавить в форму:
При этом новые переменные в php не создаются, а используются уже имеющиеся. Что сделает фильтр, он преобразует символ "<" в "<". Также он поступить с другими символами, встречающимися в html коде.
Вторая функция декодирует url, если пользователь попытается его добавить в форму.
$fio = urldecode($fio);
$email = urldecode($email);
Третей функцией мы удалим пробелы с начала и конца строки, если таковые имеются:
$fio = trim($fio);
$email = trim($email);
Существуют и другие функции, позволяющие отфильтровать переменные php. Их использование зависит от того, насколько вы опасаетесь того, что злоумышленник попытается добавить программный код в данную форму отправки данных на почту html.
Проверка данных, передаваемых от HTML формы в файл PHP
Для того, чотбы проверить, работает ли этот код, передаются ли данные можно просто их вывести на экран при помощи функции echo:
echo $fio;
echo "
";
echo $fio;
Вторая строка здесь нужна для того, чтобы разделить вывод переменных php на разные строки.
Отправляем полученные данные из формы HTML на почту при помощи PHP
Для отправки данных на почту нужно воспользоваться функцией mail в PHP.
mail("на какой адрес отправить", "тема письма", "Сообщение (тело письма)","From: с какого email отправляется письмо \r\n");
Например, нужно отправить данные на email владельца сайта или менеджера [email protected].
Тема письма должна быть понятной, а сообщение письма должно содержать то, что указал пользователь в HTML форме.
mail("[email protected]", "Заявка с сайта", "ФИО:".$fio.". E-mail: ".$email ,"From: [email protected] \r\n");
Необходимо добавить условие, которе проверит отправилась ли форма при помощи PHP на указанные адрес электронной почты.
if (mail("[email protected]", "Заказ с сайта", "ФИО:".$fio.". E-mail: ".$email ,"From: [email protected] \r\n"))
{
echo "сообщение успешно отправлено";
} else {
}
Таким образом программный код файла send.php, который отправит данные HTML формы на почту будет выглядеть следующим образом:
$fio = $_POST["fio"];
$email = $_POST["email"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
//echo $fio;
//echo "
";
//echo $email;
if (mail("[email protected]", "Заявка с сайта", "ФИО:".$fio.". E-mail: ".$email ,"From: [email protected] \r\n"))
{ echo "сообщение успешно отправлено";
} else {
echo "при отправке сообщения возникли ошибки";
}?>
Три строки для проверки, передаются ли данные в файл закомментированы. При необходимости их можно удалить, так как они нужны были только для отладки.
Помещаем HTML и PHP код отправки формы в один файл
В комментариях к этой статье многие задают вопрос о том, как сделать, чтобы и HTML форма и PHP код отправки данных на почту находились в одном файле, а не двух.
Для реализации такой работы нужно поместить HTML код формы в файл send.php и добавить условие, которое будет проверять наличие переменных в массиве POST (этот массив передается из формы). То есть, если переменные в массиве не существуют, то нужно показать пользователю форму. Иначе нужно принять данные из массива и отправить их адресату.
Давайте посмотрим как изменить PHP код в файле send.php:
//проверяем, существуют ли переменные в массиве POST
if(!isset($_POST["fio"]) and !isset($_POST["email"])){
?> } else {
//показываем форму
$fio = $_POST["fio"];
$email = $_POST["email"];
$fio = htmlspecialchars($fio);
$email = htmlspecialchars($email);
$fio = urldecode($fio);
$email = urldecode($email);
$fio = trim($fio);
$email = trim($email);
if (mail("[email protected]", "Заявка с сайта", "ФИО:".$fio.". E-mail: ".$email ,"From: [email protected] \r\n")){
echo "Сообщение успешно отправлено";
} else {
echo "При отправке сообщения возникли ошибки";
}
}
?>
Существование переменной в POST массиве мы проверяем PHP функцией isset(). Восклицательный знак перед этой функцией в условии означает отрицание. То есть, если переменной не существует, то нужно показать нашу форму. Если бы я не поставил восклицательный знак, то условие дословно означало бы - "если существует, то показать форму". А это неправильно в нашем случае. Естественно, что вы можете переименовать его в index.php. Если будуту переименовывать файл, то не забудьте переименовать название файла и в строке