Почему php-почта может быть отправлена, но не получена, если я не вызову скрипт вручную?

Почему php-почта может не быть получена во втором случае, когда twilio вызывает страницу? Существуют ли символы, которые могут быть возвращены API, из-за которых электронная почта не может быть доставлена?

1) Если я ввожу URL-адрес в браузер, он пытается создать wav-файл в папке с моими записями, и я получаю электронные письма и текстовые сообщения для всех получателей. Вывод ниже обслуживается, и «1» указывает, что сообщение было отправлено.

2) Если twilio вызывает страницу и обрабатывает xml, фактическое сообщение записывается на мой сервер, а приведенный ниже вывод передается twilio (что я проверил в своей учетной записи), но никто не получает электронное письмо или текст. Тело xml по-прежнему показывает «1» после «прощай», что указывает на то, что сообщение было отправлено.

Мой сценарий:

<?php
date_default_timezone_set('America/New_York');
//copy the remote wav file to my server
$recording = file_get_contents($_REQUEST['RecordingUrl']);
$name = "recordings/".str_replace("+","",$_REQUEST['Caller'])."-".date('Y-m-d-G-i-s',time()).".wav";
$fh = fopen("../".$name, 'w') or die("can't open file");
$stringData = $recording;
fwrite($fh, $stringData);
fclose($fh);

//email the people that need to get the message
$to = "[email protected]";
$subject = "Voicemail from ".$_REQUEST['From'];
$message = "Click below to listen to your message:\n\r  http://domain.com/twilio/".$name;
$from = "[email protected]";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
$to = "[email protected]";
mail($to,$subject,$message,$headers);
$to = "[email protected]";
$sent = mail($to,$subject,$message,$headers);

header("content-type: text/xml");
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n
            <Response>
                <Say>Thank you for your message. Good bye.".$sent."</Say>
                <Hangup/>
            </Response>";
?>

выходы:

        <Response>
            <Say>Thank you for your message. Good bye.1</Say>
            <Hangup/>
        </Response>

Я просто проверяю содержимое каждой переменной в почтовой функции php, когда twilio вызывает скрипт, чтобы увидеть, присутствует ли символ из живого сообщения twilio. Получается вот так:

$to = [email protected]
$subject = Voicemail from +19545555555

$message = Click below to listen to your message:

  http://domain.com/twilio/recordings/19545555555-2013-10-12-22-57-03.wav

$headers = From:[email protected]

Если я вызову скрипт вручную в браузере, они будут:

$to = [email protected]
$subject = Voicemail from 
$message = Click below to listen to your message:

  http://domain.com/twilio/recordings/-2013-10-12-23-04-37.wav

From:[email protected]

person Altimus Prime    schedule 13.10.2013    source источник
comment
Вы проверяли папку со спамом?   -  person Hanky Panky    schedule 13.10.2013
comment
Я только что сделал, но его там нет. В первом случае, когда я вручную вызываю скрипт, я получаю электронные письма нормально. Во втором письмо не доставляется, даже в папку со спамом.   -  person Altimus Prime    schedule 13.10.2013


Ответы (2)


Я пытался удалить "+" из темы без успеха, но когда я удалил весь номер телефона из темы, это работает во всех направлениях. Электронные письма и тексты доставляются надлежащим образом. Это не имеет никакого смысла для меня. Может быть, этот чертов веб-хостинг снова портит мне жизнь.

person Altimus Prime    schedule 13.10.2013

Возможно, в строке from есть плохие символы, которые портят вызов mail(), но эхо прозрачно. Попробуйте очистить свою строку, прежде чем помещать ее в mail().

Что-то вроде:

$subject= preg_replace("/[^a-zA-Z0-9]+/", "", $_REQUEST['From']);
person RockwoodON    schedule 16.10.2013