2

I'm really struggling to make a email with attachment using php mail() function, i've successfuly attach my files but message just shown HTML and CSS code not email body message like this :

enter image description here

this is my code :

 $htmlbody = '
                    <!doctype html>
                    <html>
                    <head>
                        <title>Invoice</title>

                        <style>
                        .invoice-box{
                            background-color: rgb(244, 244, 244);
                            max-width:800px;
                            margin:auto;
                            padding:30px;
                            border:1px solid #eee;
                            box-shadow:0 0 10px rgba(0, 0, 0, .15);
                            font-size:16px;
                            line-height:24px;
                            font-family:"Helvetica Neue", "Helvetica", Helvetica, Arial, sans-serif;
                            color:#555;
                            border-color: #fe7100;
                            border-width: medium;
                        }

                        .invoice-box table{
                            width:100%;
                            line-height:inherit;
                            text-align:left;
                        }

                        .invoice-box table td{
                            padding:5px;
                            vertical-align:top;
                        }

                        .invoice-box table tr td:nth-child(2){
                            text-align:right;
                        }

                        .invoice-box table tr.top table td{
                            padding-bottom:20px;
                        }

                        .invoice-box table tr.top table td.title{
                            font-size:45px;
                            line-height:45px;
                            color:#333;
                        }

                        .invoice-box table tr.information table td{
                            padding-bottom:40px;
                        }

                        .invoice-box table tr.heading td{
                            background:#33665e;
                            border-bottom:1px solid #ddd;
                            font-weight:bold;
                            color: white;
                        }

                        .invoice-box table tr.details td{
                            padding-bottom:5px;
                        }

                        .invoice-box table tr.item td{
                            border-bottom:1px solid #eee;
                        }

                        .invoice-box table tr.item.last td{
                            border-bottom:none;
                        }

                        .invoice-box table tr.total td:nth-child(2){
                            border-top:2px solid #eee;
                            font-weight:bold;
                        }

                        @media only screen and (max-width: 600px) {
                            .invoice-box table tr.top table td{
                                width:100%;
                                display:block;
                                text-align:center;
                            }

                            .invoice-box table tr.information table td{
                                width:100%;
                                display:block;
                                text-align:center;
                            }
                        }

                        .block-garis{
                          width: 100%;
                          height: 3px;
                          background-color: #fe7100;
                        }
                        </style>
                    </head>

                    <body>
                        <div class="invoice-box">
                            <table cellpadding="0" cellspacing="0">
                                <tr class="top">
                                    <td colspan="2">
                                        <table>
                                            <tr>
                                                <td class="title">
                                                    <img src="https://4travelo.com/logo.png" style="width:100%; max-width:200px;">
                                                </td>

                                                <td>
                                                    Invoice #: '.$id.'<br>
                                                    Created: '.$tglbook.'<br>
                                                    Due: '.$timeexpiry.'
                                                </td>
                                            </tr>
                                        </table>
                                    </td>
                                </tr>

                                <tr>
                                  <td colspan="2"><div class="block-garis"></div></td>
                                </tr>

                                <tr class="information">
                                    <td colspan="2">
                                        <table>
                                            <tr>
                                                <td>
                                                    4travelo.<br>
                                                    Jl. Kebonsari Menanggal 2B<br>
                                                    Surabaya.
                                                </td>
                                            </tr>
                                        </table>
                                    </td>
                                </tr>
                                <tr class="heading">

                                    <td>
                                        Keterangan Hotel
                                    </td>

                                    <td>
                                        &nbsp;
                                    </td>
                                </tr>

                                <tr class="details">
                                    <td>
                                        Nama Hotel
                                    </td>

                                    <td>
                                        '.$hotelname.'
                                    </td>
                                </tr>
                                <tr class="details">
                                    <td>
                                        Alamat Hotel
                                    </td>

                                    <td>
                                        '.$alamat.'
                                    </td>
                                </tr>
                                <tr class="details">
                                    <td>
                                        Checkin
                                    </td>

                                    <td>
                                       '.$checkin.'
                                    </td>
                                </tr>
                                <tr class="details">
                                  <td>
                                      Checkout
                                  </td>

                                  <td>
                                     '.$checkout.'
                                  </td>
                                </tr>

                                <tr class="heading">
                                    <td>
                                        Guest
                                    </td>

                                    <td>
                                        &nbsp;
                                    </td>
                                </tr>

                                <tr class="item">
                                    <td>
                                        Guest Name
                                    </td>

                                    <td>
                                        '.$paxesname.'
                                    </td>
                                </tr>

                                <tr class="item">
                                    <td>
                                        Type Kamar
                                    </td>

                                    <td>
                                       '.$room.'
                                    </td>
                                </tr>

                                <tr class="item">
                                    <td>
                                        Include BF/Net
                                    </td>

                                    <td>
                                        '.$meal.'
                                    </td>
                                </tr>

                                <tr class="item">
                                    <td>
                                        Dewasa
                                    </td>

                                    <td>
                                        '.$adult.'
                                    </td>
                                </tr>

                                <tr class="item">
                                    <td>
                                        Anak - Anak
                                    </td>

                                    <td>
                                        '.$child.'
                                    </td>
                                </tr>

                                <tr class="heading">
                                    <td>
                                        Total
                                    </td>

                                    <td>
                                        &nbsp;
                                    </td>
                                </tr>

                                 <tr class="item">
                                    <td>
                                        Total
                                    </td>

                                    <td>
                                        <b>Rp '.$payment.'</b>
                                    </td>
                                </tr>
                                <tr>
                                  <td>&nbsp;</td>
                                  <td>&nbsp;</td>
                                </tr>

                                <tr>
                                  <td>&nbsp;</td>
                                  <td>&nbsp;</td>
                                </tr>

                                <tr>
                                  <td>&nbsp;</td>
                                  <td>&nbsp;</td>
                                </tr>
                                <tr style="font-size:10px; padding-top:50px;">
                                  <td><b>Hotel cancelation policy :
                                  <br>1. Pemesanan non refundable<br>
                                  2. Tanggal inap & tipe kamar tidak dapat dirubah</b>
                                  </td>
                                  <td><b>our partner : </b> <br><img src="https://4travelo.com/hb.png" alt=""></td>
                                </tr>

                                <tr>
                                  <td>&nbsp;</td>
                                  <td style=""></td>
                                </tr>
                            </table>
                        </div>

                    </body>
                    </html>';
        $to = $email; //Recipient Email Address
        $subject = "Test email with attachment"; //Email Subject
        $headers = "From: [email protected]\r\nReply-To: [email protected]";
        $random_hash = md5(date('r', time()));
        $headers .= "\r\nContent-Type: multipart/mixed; 
        boundary=\"PHP-mixed-".$random_hash."\"";
        // Set your file path here
       $attachment = chunk_split(base64_encode(file_get_contents('/home/travelo/public_html/4travelo.com/triomacan/4travelo_beta-2.0/document/'.$invoice.'.pdf'))); 


        //define the body of the message.
        $message = "--PHP-mixed-$random_hash\r\n"."Content-Type: multipart/alternative; 
        boundary=\"PHP-alt-$random_hash\"\r\n\r\n";
        $message .= "--PHP-alt-$random_hash\r\n"."Content-Type: text/plain; 
        charset=\"iso-8859-1\"\r\n"."Content-Transfer-Encoding: 7bit\r\n\r\n";


        //Insert the html message.
        $message .= "$htmlbody";
        $message .="\r\n\r\n--PHP-alt-$random_hash--\r\n\r\n";


        //include attachment
        $message .= "--PHP-mixed-$random_hash\r\n"."Content-Type: application/zip; 
        name=\"invoice.pdf\"\r\n"."Content-Transfer-Encoding: 
        base64\r\n"."Content-Disposition: attachment\r\n\r\n";

        $message .= $attachment;
        $message .= "/r/n--PHP-mixed-$random_hash--";


        //send the email
        $mail = mail( $to, $subject , $message, $headers, '-f [email protected]' );

        echo $mail ? "Mail sent" : "Mail failed";

can somebody help me ??

3 Answers 3

2

Instead of

$message .= "--PHP-alt-$random_hash\r\n"."Content-Type: text/plain; 

try

$message .= "--PHP-alt-$random_hash\r\n"."Content-Type: text/html; 
Sign up to request clarification or add additional context in comments.

3 Comments

Overall content type is set in $headers rather than $message, but $message should be changed too.
You're right. But I think text/plain could be a problem too in this situation
Yes i agree, all occurrences should be changed to text/html
0

I'm not usually a big fan of "Try a different package" type responses, but I make an exception for PHP's mail() function. There are far more painless solutions out there that will avoid the sort of problems you are experiencing. I've used PHPMailer (https://github.com/PHPMailer/PHPMailer) with great success over the past few years, but there are several others too, such as Swiftmailer.

Comments

0

Your headers are set to multipart/mixed, try tidying them up:

$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
$headers .= 'From: My Name Here <[email protected]>' . "\r\n";

Also change the content type in the message to:

$message .= "--PHP-alt-$random_hash\r\n"."Content-Type: text/html; 

And anywhere else

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.