• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 661
  • Last Modified:

php mail putting random spaces in email output

Hi,

The script below opens a .csv file replaces the commas and new lines and then emails the output in HTML format. The problem is, on receiving the email it has a random space in the text, for example:

column1|column2|column3|column4|column5|column6
column1|column2|column3|column4|column5|column6
column1|column2|co lumn3|column4|column5|column6
column1|column2|column3|column4|column5|column6
column1|column2|column3|column4|column5|column6

This space roughly appears every 980 characters (with spaces) - This is using MS Outlook.

Writing the variable $new_file to a file and displaying to screen don't show up this issue. Any help would be greatly appreciated.

<?php

$file = file_get_contents("../upload/$filename);

$search = array(",", "\r\n");
$replace = array("|", "<br>");
$new_file = str_replace($search, $replace, $file);

file_put_contents("/tmp/maildebuglog.txt",$new_file);

mail($address, 'Email Subject', $new_file,
        "To: $user <$user@somedomain.com>\n".
        "From: $admin <$admin@somedomain.com>\n".
        "MIME-Version: 1.0\n".
        "Content-type: text/html; charset=iso-8859-1" . "\n");

echo "$new_file";

?>

Open in new window


Thank you.
0
bootneck2222
Asked:
bootneck2222
  • 2
1 Solution
 
Mark BradyPrincipal Data EngineerCommented:
Hmmm that's strange. Line 3 is missing the closing double quote but I'm guessing that's a typo.

$file = nl2br(file_get_contents("../upload/$filename)); // now the <br> are already in the file

// however this does not remove the newline characters

$search = array(",", "\r", "\n");
$replace = array("|");

// by separating the \r and the \n you will catch any occurrences of these characters on their own.

// By having only 1 item in the replace array the 2nd item in the search array will be replace with an empty string by default

// trim
$new_file = trim(str_replace($search, $replace, $file)); // just for safety sake

See how that goes
0
 
Dave BaldwinFixer of ProblemsCommented:
You should probably be including that file as an attachment instead of in the body.  According to the Internet Message Format RFC the latest of which is 5322:
There are two limits that this standard places on the number of characters in a line. Each line of characters MUST be no more than 998 characters, and SHOULD be no more than 78 characters, excluding the CRLF.

http://stackoverflow.com/questions/11794698/max-line-length-in-mail

The normal method for content that doesn't have a line length like images is to use MIME boundaries and chunked base64 encoding which all mail clients understand.  That is also how attachments are included in emails.  If you specify it properly, you can put the whole message in base64 encoded format and completely get around line length problems.
0
 
bootneck2222Author Commented:
Thanks elvin66 for answer and introducing me to the nl2br function.
0
 
Mark BradyPrincipal Data EngineerCommented:
You're welcome. Just keep in mind that nl2br() only adds the <br> element into the text but does not remove the newline characters so you need to do a str_replace to remove them (if you need to).

Good luck
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now