phpmailer добавляет больше содержимого в тело письма

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

<form id="contact-form" class="contact-form" method="post" action="send-mail.php">          
    <input type="text" name="name" id="name" placeholder="Name" tabindex="1">
    <input type="text" name="subject" id="trade" placeholder="Your Trade" tabindex="3">
    <input type="text" name="email" id="email" placeholder="Your Email" tabindex="2">
    <input type="text" name="number" id="number" placeholder="Contact Number" tabindex="4">
    <textarea id="message" rows="8" name="message" placeholder="Message" tabindex="5"></textarea>
    <div class="grid-col one-whole">
            <button type="submit">Send Your Message</button>
    </div>
</form>

.php:

<?php
require('PHPFiles/PHPMailerAutoload.php');
require('PHPFiles/class.smtp.php');
require('PHPFiles/class.phpmailer.php');

$mail = new PHPMailer;

//$mail->SMTPDebug = 3;    
$mail->IsSMTP();
$mail->Host = '74.208.5.2';
$mail->SMTPAuth = true;
$mail->Username = '[email protected]';           
$mail->Password = '*******';                          
$mail->SMTPSecure = 'tls';
$mail->Port = 25; connect to

$mail->From = isset($_POST["email"]) ? $_POST["email"] : "";
$mail->FromName = isset($_POST["email"]) ? $_POST["email"] : "";
$mail->addAddress('[email protected]'); 
$mail->Subject = isset($_POST["subject"]) ? $_POST["subject"] : "";
$mail->Body = str_replace("\n",'<br>', $_POST['message']);

$mail->AltBody = 'This is the body in plain text for non-HTML mail clients';

$mail->isHTML(true); 

if(!$mail->send()) {
    echo 'Message could not be sent.';
    echo 'Mailer Error: ' . $mail->ErrorInfo;
} else {
    echo 'Message has been sent';
}

На данный момент тело письма содержит содержимое поля textare. Как тело может содержать это, а затем еще и разрыв строки, а затем содержимое числового поля?


person user3731438    schedule 24.07.2015    source источник
comment
это просто строка. $mail->body = 'foo'; $mail->body .= 'bar' дает вам foobar в качестве тела.   -  person Marc B    schedule 24.07.2015
comment
@MarcB - вторая почта $ должна иметь расширение . перед = ??   -  person user3731438    schedule 24.07.2015
comment
у вас есть ошибка в вашем str_replace, это должно быть str_replace('\n','‹br›', ...,   -  person fsn    schedule 24.07.2015
comment
@MarcB - тело тоже должно быть в верхнем регистре B ... но в остальном это работает   -  person user3731438    schedule 24.07.2015
comment
@fsn - можете ли вы объяснить, в чем ошибка ??   -  person user3731438    schedule 24.07.2015
comment
вы должны использовать '\n' для вашего str_replace для работы или использовать \\n и экранировать его, также сделайте как ‹br /›   -  person fsn    schedule 24.07.2015


Ответы (2)


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

$message = "Name :- " . $_POST['name'] . "<br>" . " Number :- " . $_POST['number'];
$mail->Body = $message;
person Akshay    schedule 24.07.2015
comment
с приведенным выше я получаю ошибку синтаксического анализа: синтаксическая ошибка, неожиданное '', ожидание идентификатора (T_STRING) или переменной (T_VARIABLE) или числа (T_NUM_STRING) - person user3731438; 24.07.2015
comment
это не работает, пожалуйста, проверьте свой код перед отправкой - person user3731438; 24.07.2015

поэтому делайте это так:

$mail->Body = str_replace('\n','<br />', $_POST['message']);

or:

$mail->Body = str_replace("\\n","<br />", $_POST["message"]);

должно исправить проблему строки, получающей "разрывы строк".

Кстати. всегда хорошо:

var_dump($data);
die();

чтобы увидеть, что вы получаете на каждом шаге кода

person fsn    schedule 24.07.2015