Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

workaround for the 990 character limitation for email mailservers

Wanted to know if there are any functions/classes/etc.. to help with the 990 character limitation for email as my HTML is being effected due to this.

The Problem: (Source)

Note that mailservers have a 990-character limit on each line contained within an email message. If an email message is sent that contains lines longer than 990-characters, those lines will be subdivided by additional line ending characters, which can cause corruption in the email message, particularly for HTML content. To prevent this from occurring, add your own line-ending characters at appropriate locations within the email message to ensure that no lines are longer than 990 characters.

Anyone else seem to have this problem? and how did you fix this?

Sounds like I need to find a good place to split my HTML and manually add a line break, ugh...

UPDATE:

It's tablature data with many rows. So do I need to add a \n or <br /> somewhere?

UPDATE #2: Adding MIME Type Code

$headers  = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=iso-8859-1\r\n";
$headers .= "Content-Transfer-Encoding: quoted-printable\r\n"; // added this, but still no results
$headers .= "From: [email protected]\r\n";

Here is how I'm calling the function(s):

How I originally called:

return $html;

What I tried:

return imap_8bit($html); // not working, nothing is captured in the error log

AND

return imap_binary($html); // not working, nothing is captured in the error log

UPDATE #3 (Adding Mail Function)

try {
    mail(
        '[email protected]',
        'Subject of Email',
        $html,
        $headers
        );
    } catch (Exception $e) {
        echo ("ERROR: Email NOT sent, Exception: ".$e->getMessage());
    }

Example HTML (This is the message of the HTML email) (This is also in a class that is part of a XMLRPC service)

private function getHTML() {
    $html  = '<html><head><title>Title</title></head><body>';
    $html .= '<table>';
    $html .= '<tr><td>many many rows like this</td></tr>';
    $html .= '<tr><td>many many rows like this</td></tr>';
    $html .= '<tr><td>many many rows like this</td></tr>';
    $html .= '<tr><td>many many rows like this</td></tr>';
    $html .= '<tr><td>many many rows like this</td></tr>';
    $html .= '</table>';
    $html .= '</body>';
    $html .= '</html>';

    return $html;
    //return imap_8bit($html); // not working, nothing is captured in the error log
    //return imap_binary($html); // not working, nothing is captured in the error log
    // Both of these return the XMLRPC Fault Exception: 651 Failed to parse response
}

Fault Exception: 651 Failed to parse response basically doesn't like the format or how the data is returned.

like image 901
Phill Pafford Avatar asked Jan 19 '11 16:01

Phill Pafford


2 Answers

You can put your content through the wordwrap() function so that you don't manually have to insert newlines.

Have you considered using one of the many mail libraries available? PHPMailer, PEAR Mail, SwiftMailer, etc...?

like image 189
jasonbar Avatar answered Oct 19 '22 01:10

jasonbar


Order servers have an even lower limit: 76 chars per line + \r\n.

You have to make use of the imap_8bit() and imap_binary() functions in order to convert your data to a base64 or quoted-printable encoding.

You can also use an existing library, like SwiftMailer.

like image 2
Alix Axel Avatar answered Oct 18 '22 23:10

Alix Axel