PHP - Форма для вставки почты! и строка разбивается на длинные строки - PullRequest
6 голосов
/ 10 января 2012

У меня есть форма на сайте моей компании, в которой указываются имя, номер телефона и комментарии (и еще несколько вещей). В поле для комментариев можно вводить до 5000 символов - большое ограничение для очень многословных клиентов. Содержимое действующей формы отправляется с использованием формы php mail в виде простого электронного письма в наш отдел продаж.

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

Я нашел одно сообщение на форуме о том, что существует ограничение в 990 символов, которое ведет к этой проблеме.

Кто-нибудь знает причину? Кто-нибудь знает довольно легко исправить это?

Соответствующий код PHP:

$to = $email;

$subject = "Website Order Received: $offer";

$contents = "
Order Form Received -\n
Name: $name\n
Company: $company\n
Email: $email\n
Phone: $phone $phoneExt\n
Order Contents:\n" .
($offer == 'web-demo' ? "- I want a live software demonstration.\n" : "") .
($offer == 'pricing' ? "- I'd like pricing information.\n" : "") .
($offer == 'holiday-pricing' ? "- I'd like to sign up before December 31st for the special holiday offer!\n" : "") .
($offer == 'bid-help' ? "- Please give me marketing materials and other assistance for winning bids.\n" : "") .
($offer == 'demo-cd' ? "- Send me the full-version demonstration CD.\n" : "");
if (!empty ($comments)) {
    $comments = str_replace("
", "\n", $comments); // Preserves line breaks in the comments.
    $contents = $contents."\nComments: $comments\n\n";
}
$contents = str_replace("\n", "\r\n", $contents);

mail($to, $subject, $contents);

1 Ответ

10 голосов
/ 10 января 2012

Существует ограничение на количество символов в строке электронного письма:

Существует два ограничения, которые этот стандарт устанавливает для количества символов в строке.Каждая строка символов ДОЛЖНА быть не более 998 символов и ДОЛЖНА быть не более 78 символов, исключая CRLF. (RFC 2882)

Вы можете использовать функцию PHP wordwrap для достижения этой цели:

$contents = wordwrap($contents);

В любом случаеэто улучшит читабельность писем, отправленных с вашим сценарием, а также сделает их совместимыми со стандартами.

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