Почему 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 = "email1@yahoo.com";
$subject = "Voicemail from ".$_REQUEST['From'];
$message = "Click below to listen to your message:\n\r  http://domain.com/twilio/".$name;
$from = "email2@domain.com";
$headers = "From:" . $from;
mail($to,$subject,$message,$headers);
$to = "email3@domain.com";
mail($to,$subject,$message,$headers);
$to = "9545555555@messaging.sprintpcs.com";
$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 mail, когда twilio вызывает скрипт, чтобы увидеть, присутствует ли символ из живого сообщения twilio. Получается так:

$to = 9545555555@messaging.sprintpcs.com
$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:email2@domain.com

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

$to = 9545555555@messaging.sprintpcs.com
$subject = Voicemail from 
$message = Click below to listen to your message:

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

From:email2@domain.com

2 ответа

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

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

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

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

Другие вопросы по тегам