Problem sending e-mail (with html) using PHP

1

Hello, I have a code in html to send in email which in normal html mode it normally apples but when I send email, when viewing in gmail, all the html arrives. In Thunderbird, the email arrives with the html correctly.

Does anyone have a solution for me?

My html code is:

function html() {
    $r = '
<!-- v 0.1 -->
<head>
    <style>
    .descricao {text-align:center;float:left;width:350px;font-family:Arial;height:100px;border:1px solid green;background-color:white;font-size:40px;color:black;padding:15px;}
    .especificacao {margin-left:3px;float:left;text-align:center;width:350px;font-family:Arial;height:100px;border:1px solid green;background-color:white;font-size:40px;color:black;padding:15px;}
    .empresa {text-align:center;width:735px;margin-bottom:3px;font-family:Arial;height:75px;border:1px solid green;background-color:white;font-size:40px;color:black;padding:15px;}
    </style>
</head>
<div style="width:770px;border:1px solid gray;padding:15px;background-color:green;">
    <div class="empresa">
        '.template("empresa").'
    </div>
    <div class="descricao">
        '.template("descricao_item_01").'
    </div>
    <div class="especificacao">
        DESCRICAO ---> 01
        PREÇO ----> R$ '.template("preco_item_01").'
    </div>
    <div class="descricao">
        '.template("descricao_item_02").'
    </div>
    <div class="especificacao">
        DESCRICAO ---> 02
        PREÇO ----> R$ '.template("preco_item_02").'
    </div>
    <div class="descricao">
        '.template("descricao_item_03").'
    </div>
    <div class="especificacao">
        DESCRICAO ---> 03
        PREÇO ----> R$ '.template("preco_item_03").'
    </div>
    <div class="descricao">
        '.template("descricao_item_04").'
    </div>
    <div class="especificacao">
        DESCRICAO ---> 04
        PREÇO ----> R$ '.template("preco_item_04").'
    </div>
    <div class="descricao">
        '.template("descricao_item_05").'
    </div>
    <div class="especificacao">
        DESCRICAO ---> 05
        PREÇO ----> R$ '.template("preco_item_05").'
    </div>
    <div class="descricao">
        '.template("descricao_item_06").'
    </div>
    <div class="especificacao">
        DESCRICAO ---> 06
        PREÇO ----> R$ '.template("preco_item_06").'
    </div>
    <div style="clear:both;">'.template("cnpj").' - '.template("telefone").'</div>
</div>



    ';
    return $r;
}

The code to send the html is:

function sendmail() {
    if(!isset($_POST[Submit])) die("Não foi recebido nenhum parâmetro");
    /* Medida preventiva para evitar que outros domínios sejam remetente da sua mensagem. */
    if (eregi('tempsite.ws$|locaweb.com.br$|hospedagemdesites.ws$|websiteseguro.com$', $_SERVER[HTTP_HOST])) {
            $emailsender=trim($_POST['emailremetente']);
    } else {
            $emailsender = "noreply@" . $_SERVER[HTTP_HOST];
    }

    /* Verifica qual é o sistema operacional do servidor para ajustar o cabeçalho de forma correta. Não alterar */
    if(PHP_OS == "Linux") $quebra_linha = "\n";
    elseif(PHP_OS == "WINNT") $quebra_linha = "\r\n";
    else die("Incompatibilidade com Sistema Operacional");

    // Passando os dados obtidos pelo formulário para as variáveis abaixo
    $nomeremetente     = $_POST['nomeremetente'];
    $emailremetente    = trim($_POST['emailremetente']);
    $assunto           = $_POST['assunto'];

    $array_emaildestinatario = array();
    $array_emaildestinatario = explode("\n",trim($_POST['emaildestinatario'])); // separa os emails pelas vírgulas em uma array
    foreach($array_emaildestinatario as $elemento) {
        //pra cada email envia
        /* Montando a mensagem a ser enviada no corpo do e-mail. */
        $mensagemHTML = html();


        /* Montando o cabeçalho da mensagem */
        $headers = "MIME-Version: 1.1".$quebra_linha;
        $headers .= "Content-type: text/html; charset=iso-8859-1".$quebra_linha;
        // Perceba que a linha acima contém "text/html", sem essa linha, a mensagem não chegará formatada.
        $headers .= "From: ".$emailsender.$quebra_linha;
        $headers .= "Return-Path: " . $emailsender . $quebra_linha;

        $headers .= "Reply-To: ".$emailremetente.$quebra_linha;
        // Note que o e-mail do remetente será usado no campo Reply-To (Responder Para)

        /* Enviando a mensagem */
        mail($elemento, $assunto, $mensagemHTML, $headers, "-r". $emailsender);
    }
    /* Mostrando na tela as informações enviadas por e-mail */
    ?>
        <div style="color:white;border:1px solid black;padding:15px;background-color:rgba(150,50,50,0.8);font-family:Arial;margin-bottom:5px;font-size:14px;">
            Enviando <?php echo count($array_emaildestinatario); ?> e-mails, aguarde um instante...
        </div>
        <div style="color:white;border:1px solid black;padding:15px;background-color:rgba(150,50,50,0.8);font-family:Arial;margin-bottom:5px;font-size:14px;">
            De:<?php echo $emailsender; ?>
        </div>
        <div style="color:white;border:1px solid black;padding-left:15px;padding-top:5px;padding-bottom:5px;background-color:rgba(150,50,50,0.3);font-family:Arial;margin-bottom:5px;font-size:14px;">
        <?php 
        foreach($array_emaildestinatario as $elemento) {
            echo "<p>$elemento</p>";
        }
        ?>
        </div>
<?php
}

IT GOES WRONG IN GMAIL SO: (MY PROBLEM IS HERE IN GMAIL) ANDNOTHUNDERBIRDGOESCORRECTTHAT:

Does anyone have a solution?

    
asked by anonymous 16.10.2014 / 06:16

2 answers

1

In ThunderBird it can be coding conflict with your PHP (check the coding of your php if it is also 8859-1).

In Gmail it may be a matter of using inline css in the head, according to this article ( here ) it lists in the items that should not be made .

    
16.10.2014 / 07:10
0

You do not need to use these line break tests. The constant PHP_EOL already does this. You can not use external styles or within the style tag.

Use a CSS inliner tool to do this for you, it gets easier. link

You should not use ISO-8859-1 encoding as the colleague mentioned above, but rather Unicode UTF-8 ALWAYS , if you do not want problems with accent and characters strangers.

    
16.10.2014 / 07:16