【问题标题】:PHP break line ".\n" isn't working in email body. Lines are dissapearingPHP 换行符“.\n”在电子邮件正文中不起作用。线条正在消失
【发布时间】:2018-06-23 09:42:56
【问题描述】:

如何在$sender_name$sender_number 之后换行?现在它只显示$sender_name 作为输出,但是当我删除“\n”时,它们都在一行中。

    $body .= chunk_split(base64_encode($sender_name."\n\r"));
    $body .= chunk_split(base64_encode($sender_number."\n\r"));
    $body .= chunk_split(base64_encode($sender_message."\n\r"));

整个 PHP 代码

<?php
if($_POST && isset($_FILES['file']))
{
    $recipient_email    = "mymail@gmail.com"; //recepient
    $from_email         = "mymail2@gmail.com"; //from email using site domain.
    $subject            = "Attachment email from your website!"; //email subject line

    $sender_name = filter_var($_POST["s_name"], FILTER_SANITIZE_STRING); //capture sender name
    $sender_number = filter_var($_POST["s_number"], FILTER_SANITIZE_STRING); //capture sender number
    $sender_email = filter_var($_POST["s_email"], FILTER_SANITIZE_STRING); //capture sender email
    $sender_message = filter_var($_POST["s_message"], FILTER_SANITIZE_STRING); //capture message
    $attachments = $_FILES['file'];

    //php validation
    if(strlen($sender_name)<4){
        die('Name is too short or empty');
    }
    if(strlen($sender_number)<4){
        die('Number is too short or empty');
    }
    if (!filter_var($sender_email, FILTER_VALIDATE_EMAIL)) {
      die('Invalid email');
    }
    if(strlen($sender_message)<4){
        die('Too short message! Please enter something');
    }

    $file_count = count($attachments['name']); //count total files attached
    $boundary = md5(""); 

    if($file_count > 0){ //if attachment exists
        //header
        $headers = "MIME-Version: 1.0\r\n"; 
        $headers .= "From:".$from_email."\r\n"; 
        $headers .= "Reply-To: ".$sender_email."" . "\r\n";
        $headers .= "Content-Type: multipart/mixed; boundary = $boundary\r\n\r\n"; 

        //message text
        $body = "--$boundary\r\n";
        $body .= "Content-Type: text/plain; charset=ISO-8859-1\r\n";
        $body .= "Content-Transfer-Encoding: base64\r\n\r\n"; 
          $body .= chunk_split(base64_encode($sender_name)) . "<br />";
  $body .= chunk_split(base64_encode($sender_number)) . "<br />";
  $body .= chunk_split(base64_encode($sender_message)) . "<br />";

        //attachments
        for ($x = 0; $x < $file_count; $x++){       
            if(!empty($attachments['name'][$x])){

                if($attachments['error'][$x]>0) //exit script and output error if we encounter any
                {
                    $mymsg = array( 
                    1=>"The uploaded file exceeds the upload_max_filesize directive in php.ini", 
                    2=>"The uploaded file exceeds the MAX_FILE_SIZE directive that was specified in the HTML form", 
                    3=>"The uploaded file was only partially uploaded", 
                    4=>"No file was uploaded", 
                    6=>"Missing a temporary folder" ); 
                    die($mymsg[$attachments['error'][$x]]); 
                }

                //get file info
                $file_name = $attachments['name'][$x];
                $file_size = $attachments['size'][$x];
                $file_type = $attachments['type'][$x];

                //read file 
                $handle = fopen($attachments['tmp_name'][$x], "r");
                $content = fread($handle, $file_size);
                fclose($handle);
                $encoded_content = chunk_split(base64_encode($content)); //split into smaller chunks (RFC 2045)

                $body .= "--$boundary\r\n";
                $body .="Content-Type: $file_type; name=" . $file_name ."\r\n";
                $body .="Content-Disposition: attachment; filename=" . $file_name ."\r\n";
                $body .="Content-Transfer-Encoding: base64\r\n";
                $body .="X-Attachment-Id: ".rand(1000,99999)."\r\n\r\n"; 
                $body .= $encoded_content; 
            }
        }

    }else{ //send plain email otherwise
       $headers = "From:".$from_email."\r\n".
        "Reply-To: ".$sender_email. "\n" .
        "X-Mailer: PHP/" . phpversion();
        $body = $sender_name. "\n";
        $body = $sender_number. "\n";
        $body = $sender_message. "\n";
    }

     $sentMail = @mail($recipient_email, $subject, $body, $headers);
    if($sentMail) //output success or failure messages
    {       
         header("Location: index.php"); /* Redirect browser */
         exit();
    }else{

        header("Location: index.php"); /* Redirect browser */       
    }
}
?>

【问题讨论】:

  • 尝试
    而不是 \n

标签: php html email variables line-breaks


【解决方案1】:

你也在对行尾进行base64编码

所以实际输出不会有\n\r 试试这个:

$string .= $sender_name."\r\n";
$string .= $sender_number."\r\n";
$string .= $sender_message."\r\n";
$body .= base64_encode(chunk_split($string)); // I think since your transfer encoding is base64, it will not respect the line endings added by the chunk_split not sure tho so be sure to encode it all with base64

编辑: 鉴于您的代码:

$body = $sender_name. "\n";
$body = $sender_number. "\n";
$body = $sender_message. "\n";

在每一行中,您都不是附加字符串,而是为其分配一个新值;使用.= 代替赋值运算符

【讨论】:

  • 电子邮件显示为空白。
  • 抱歉,您可能想改用 .=
  • 你是对的。代码还有另一个问题。多亏了你,这一切都解决了。
【解决方案2】:

你也是 encondig "\n\r" ,请确保将换行符放在最后,

  $body .= chunk_split(base64_encode($sender_name)) . PHP_EOL;
  $body .= chunk_split(base64_encode($sender_number)) . PHP_EOL;
  $body .= chunk_split(base64_encode($sender_message)) . PHP_EOL;

如果您以 html 格式发送电子邮件,请将 PHP_EOL 替换为 &lt;br /&gt;,如下所示:

  $body .= chunk_split(base64_encode($sender_name)) . "<br />";
  $body .= chunk_split(base64_encode($sender_number)) . "<br />";
  $body .= chunk_split(base64_encode($sender_message)) . "<br />";

【讨论】:

  • 对我没用。仍然只有 $sender_name 出现在我的电子邮件中。两种方案都试过了,结果都一样。
  • 那么我认为问题不是换行符,您的问题是\n 不起作用,请详细描述您的问题
  • 您能告诉我们您在电子邮件中收到的内容吗?以及您是如何发送电子邮件以便我们提供帮助的
  • 我收到了在我的 HTML 名称字段中输入的文本。但是数字和信息消失了。我正在使用自己的域来发送电子邮件。这意味着我认为我使用我的域运营商 SMTP 服务器。我将编辑我的问题并发布整个 php 代码。
  • 找到了解决方案。谢谢!
猜你喜欢
  • 2013-04-10
  • 1970-01-01
  • 2015-04-05
  • 2011-06-26
  • 2011-12-09
  • 1970-01-01
  • 2016-01-21
  • 1970-01-01
  • 2012-07-14
相关资源
最近更新 更多