Содержат ли электронные письма флаг отсутствия на работе, который можно прочитать из PHP - PullRequest
4 голосов
/ 16 августа 2011

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

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

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

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

Ответы [ 3 ]

5 голосов
/ 16 августа 2011

Это обсуждается в RFC 3834 Рекомендации по автоматическим ответам на электронную почту . Он определяет поле заголовка Auto-Submitted, которое указывает, было ли сообщение отправлено автоматически. Проверьте, есть ли оно, и исключите это сообщение.

1 голос
/ 04 ноября 2016

Я резюмировал, что я нашел в stackoverflow по этой теме.Следующий код - это функция, которая проверяет тему и заголовок, возвращаемые imap_fetchheader или imap_headerinfo.

Если бы только каждый почтовый клиент делал то же самое: - |Обычно они должны отправить пустой обратный путь, который может быть идентифицирован вашим скриптом для фильтрации автоматического ответа.Тем не менее, в моих тестах было показано, что этот заголовок не был отправлен версиями Outlook, которые я использовал.

Строки идентификаторов хранятся в массиве, чтобы их было проще настроить в соответствии с вашими потребностями.

 /**
 * Function _MailIsAutoSubmitted
 * @return true|false
 * @category Mail
 * @author this->guy
 */
function _MailIsAutoSubmitted($Mailbox,$EmailID){
    $Found = false;

    //Check Headers
    $Header = imap_fetchheader($Mailbox,$EmailID);
    $HeaderIdentifiers = array(
        '([X-]{0,2})Auto-Response-Suppress:([\s]*)([All|OOF])',
        'Auto-Submitted:([\s]*)auto-([replied|notified|generated])',
        'X-MS-Exchange-Inbox-Rules-Loop:',
        'X-Autorespond',
        '([X-]{0,2})Precedence:([\s]*)([auto_reply|bulk|junk])'
    );
    for($x=0;$x<count($HeaderIdentifiers);$x++){
        if(preg_match('/'.$HeaderIdentifiers[$x].'/is',$Header)){
            $Found = true;
        }
    }

    //Check Subject
    $Subject = trim(imap_headerinfo($Mailbox,$EmailID)->subject);
    $SubjectIdentifiers = array(
        'Auto:',
        'Automatic Reply:',
        'Auto Response:'
    );
    for($x=0;$x<count($SubjectIdentifiers);$x++){
        if(preg_match('/^'.$SubjectIdentifiers[$x].'/is',$Subject)){
            $Found = true;
        }
    }
    return $Found;
}
0 голосов
/ 16 августа 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...