Segeja
@Segeja
Дизайнер

Как реализовать отчет о доставке?

Сделал на php обратную связь, но еще хотелось бы чтобы при нажатии на кнопку "отправить" открывалось новое окно с отчетом о доставке, собственно говоря мне надо вызвать эту форму как то, его ссылку. Подскажите пожалуйста.
  • Вопрос задан
  • 4988 просмотров
Пригласить эксперта
Ответы на вопрос 5
Нет никаких гарантий, что письмо будет доставлено. Вы можете только гарантировать, что письмо было отправлено. А почтовики, несмотря на положительный ответ - все равно могут послать ваше письмо в спам.
Ответ написан
astrikovd
@astrikovd
Python Developer
На самом деле проверку доставки письма сделать можно, не 100% конечно, но все же. Делается это с помощью непосредственного взаимодействия с удаленным почтовиком, примерно так:

/**
     * Запись в сокет
     */
    private function sWrite( $socket, $data){
        // отправляем команду в сокет
        fputs( $socket, $data );
        // получаем первый байт ответа от сервера
        $answer = fread( $socket, 1 );
        // узнаем информацию о состоянии потока
        $remains = socket_get_status( $socket );
        // и получаем оставшиеся байты ответа от сервера
        if( $remains --> 0 ) $answer .= fread( $socket, $remains['unread_bytes'] );
        // функция возвращает ответ от сервера на переданную команду
        return $answer;
    }

    /**
     * Соединение с почтовым сервером
     */
    private function connectToServer($hostname, $port, $timeout){
        $socket = fsockopen($hostname, $port, $errno, $errstr, $timeout );
        if( !$socket ){
            return false;
        }
        else return $socket;
    }

    /**
     * Проверка e-mail
     */
    private function checkEmail($email){
        // получаем данные об MX-записи домена, указанного в email
        $path = explode("@",$email);
        $hostname = $path[1];
        $mx = dns_get_record($hostname, DNS_MX );
        $hostname = empty($mx) ? $hostname : $mx[0]['target'];
        // открываем сокет и создаем поток
        $socket = $this->connectToServer($hostname, 25, 10);
        if(!$socket){
            return false;
        }
        else{
            // отправляем пустую строку, чтобы получить приветствие сервера
            $this -> sWrite( $socket, "" );
            // представляемся сами
            $this -> sWrite( $socket, "EHLO sitename.ru\r\n" );
            $ehlo = '<no-reply@sitename.ru>';
            $rcpt = '<'.$email.'>';
            $response = $this -> sWrite( $socket, "MAIL FROM: $ehlo\r\n" );

            $response = $this -> sWrite( $socket, "RCPT TO: $rcpt\r\n" );

            // закрываем соединение
            $this -> sWrite( $socket, "QUIT\r\n" );
            fclose( $socket );
            // ниже идет простейшая обработка полученного ответа
            if( substr_count( $response, "550" ) > 0 ) return false;
            else
                if( substr_count( $response, "250" ) > 0) return true;
        }
    }
Ответ написан
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script><form>
<div class="alert"></div>
<input name="email" type="email" />
<input type="submit" value="Отправить" />
</form>

$('form').submit(function()
{
$.post('mail.php',$(this).serialize(),function(response)
{
if(response.status=="success")
{
$('form .alert').html('Письмо отправлено');
}
else
{
alert('Ошибка ' + response.error);
}
},'json');
return false;
});


mail.php
$isCorrectEmail=filter_var($_POST['email'],FILTER_VALIDATE_EMAIL) ;
if ( $isCorrectEmail &&  mail($_POST['email'], 'My Subject', 'My body text') ) {
  echo json_encode(array('status'=>'success'));exit;
}
  echo json_encode(array('status'=>'error','error'=> ($isCorrectEmail ? 'Непредвиденная ошибка' : 'Неправильно заполнено поле email' )));exit;
Ответ написан
Комментировать
mlnkv
@mlnkv
JavaScript Developer
<?php
// Сообщение
$message = "Line 1\nLine 2\nLine 3";
// На случай если какая-то строка письма длиннее 70 символов мы используем wordwrap()
$message = wordwrap($message, 70);
// Отправляем
if ( mail('caffeinated@example.com', 'My Subject', $message) ) {
  //переход по этой ссылке после отправки письма
  header('Location: http://www.example.com/'); 
}
?>
Ответ написан
Можно в письмо добавить какую нибудь картинку скрытую, с урлом, по переходу на который вы понимаете что письмо прочтено.
<img src="site.com/delivery_report/{{ id письма }}" />


После того как юзер откроет это письмо, браузер сделает GET запрос по этому урлу. Не знаю только вот как на счет того что гугл по дефолту не грузит картинки, может быть и перехода по этому урлу не случится)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы