PHPMailer, отправить html-файл с изображением и внешним css в качестве сообщения


я использую следующий код для отправки HTML-почты с вложением (zip), и если он работает.

я хочу внести изменения в:
1. отправить уже подготовленный HTML-шаблон, содержащий CSS (он находится во внешнем файле).
2. вставлять (не прикреплять) любое изображение в сообщении.
3. отправить сразу нескольким получателям.

<?php
    date_default_timezone_set('Etc/UTC');
    require 'PHPMailer/PHPMailerAutoload.php';
    $mail = new PHPMailer;
    $mail->isSMTP();
    $mail->CharSet = 'UTF-8';
    $mail->SMTPDebug = 0;
    $mail->Debugoutput = 'html';
    $mail->Host = 'smtp.gmail.com';
    $mail->Port = 587;
    $mail->SMTPSecure = 'tls';
    $mail->SMTPAuth = true;
    $mail->SMTPOptions = array(
        'ssl' => array('verify_peer' => false,'verify_peer_name' => false,'allow_self_signed' => true)
    );
    $mail->Username = "[email protected]";
    $mail->Password = "mipassword";
    $mail->setFrom('[email protected]', 'No responder');
    $mail->Subject = 'Probando mensaje';
    $mail->Body = "<h1>Mensaje HTML</h1><br><br>desde PHPMailer<br>";
    $mail->AltBody = 'No se para que sirve';
    $mail->addAttachment('adjuntar/paquete.zip');
    $mail->addAddress('[email protected]', 'Nombre Destinatario');
    if (!$mail->send()) {
        echo "Error al enviar: " . $mail->ErrorInfo;
    } else {
        echo "¡Mensaje enviado!";
    }
?>
Author: toledano, 2017-04-29

3 answers

Здесь код для отправки электронной почты с PHPMailer, это позволяет:
1. Доставка с Localhost
2. HTML-сообщение с CSS и встроенными изображениями
3. Поддержка Тильды и Eñes (UTF-8)
4. Вложение
5. Несколько получателей

Структура папок
introducir la descripción de la imagen aquí
- www, содержит index.php и enviacor.php.
- PHPMailer, библиотека PHP mailer, загрузите ее из этой ссылка.
- Шаблон, содержит mensaje1.html и стиль.css.
- загрузки, папка временных загрузок.

Index.php: содержит форму для сообщения

<!DOCTYPE html>
<html>
<head>
    <title>Enviar correo HTML+CSS+Imagen+Adjunto desde Localhost</title>
</head>
<body>
    <form method="POST" action="enviacor.php" enctype="multipart/form-data">
        <label>Destinatarios</label><br>
        <input type="text" style="width: 500px;" name="txtDestin" value="[email protected], [email protected]"><br>
        <label>Asunto</label><br>
        <input type="text" style="width: 500px;" name="txtAsunto" value = "Probando mensaje HTML"><br>
        <label>Mensaje HTML</label><br>
        <textarea name="txtMensa" style="width: 500px; height: 150px;"></textarea><br>
        <label>Imagen en el mensaje</label><br>
        <input type="file" name="txtImagen" accept="image/x-png,image/gif,image/jpeg"><br>
        <label>Archivo adjunto</label><br>
        <input type="file" name="txtAdjun" accept=".zip"><br>
        <input type="submit" value="Enviar">
    </form>
</body>
</html>

Enviacor.php: отправить почту с данными формы

<?php
    function SubirArchivo ($sfArchivo){
        $dir_subida = 'subidas/';
        $fichero_subido = $dir_subida . basename($_FILES[$sfArchivo]['name']);
        if (move_uploaded_file($_FILES[$sfArchivo]['tmp_name'], $fichero_subido)) {
            return $fichero_subido;
        } else {
            return "";
        }
    }

    set_time_limit(0);
    ignore_user_abort(true);
    /*RECOGER VALORES ENVIADOS DESDE INDEX.PHP*/
    $sDestino = $_POST['txtDestin'];
    $sAsunto = $_POST['txtAsunto'];
    $sMensaje = $_POST['txtMensa'];
    $sImagen = SubirArchivo('txtImagen');
    $sAdjunto = SubirArchivo('txtAdjun');

    date_default_timezone_set('Etc/UTC');
    require 'PHPMailer/PHPMailerAutoload.php';
    /*CONFIGURACIÓN DE CLASE*/
        $mail = new PHPMailer;
        $mail->isSMTP(); //Indicar que se usará SMTP
        $mail->CharSet = 'UTF-8';//permitir envío de caracteres especiales (tildes y ñ)
    /*CONFIGURACIÓN DE DEBUG (DEPURACIÓN)*/
        $mail->SMTPDebug = 0; //Mensajes de debug; 0 = no mostrar (en producción), 1 = de cliente, 2 = de cliente y servidor
        $mail->Debugoutput = 'html'; //Mostrar mensajes (resultados) de depuración(debug) en html
    /*CONFIGURACIÓN DE PROVEEDOR DE CORREO QUE USARÁ EL EMISOR(GMAIL)*/
        $mail->Host = 'smtp.gmail.com'; //Nombre de host
        // $mail->Host = gethostbyname('smtp.gmail.com'); // Si su red no soporta SMTP sobre IPv6
        $mail->Port = 587; //Puerto SMTP, 587 para autenticado TLS
        $mail->SMTPSecure = 'tls'; //Sistema de encriptación - ssl (obsoleto) o tls
        $mail->SMTPAuth = true;//Usar autenticación SMTP
        $mail->SMTPOptions = array(
            'ssl' => array('verify_peer' => false,'verify_peer_name' => false,'allow_self_signed' => true)
        );//opciones para "saltarse" comprobación de certificados (hace posible del envío desde localhost)
    //CONFIGURACIÓN DEL EMISOR
        $mail->Username = "[email protected]";
        $mail->Password = "mipassword";
        $mail->setFrom('[email protected]', 'Jorny');

    //CONFIGURACIÓN DEL MENSAJE, EL CUERPO DEL MENSAJE SERA UNA PLANTILLA HTML QUE INCLUYE IMAGEN Y CSS
        $mail->Subject = $sAsunto; //asunto del mensaje
        //incrustar imagen para cuerpo de mensaje(no confundir con Adjuntar)
            $mail->AddEmbeddedImage($sImagen, 'imagen'); //ruta de archivo de imagen
        //cargar archivo css para cuerpo de mensaje
            $rcss = "plantilla/estilo.css";//ruta de archivo css
            $fcss = fopen ($rcss, "r");//abrir archivo css
            $scss = fread ($fcss, filesize ($rcss));//leer contenido de css
            fclose ($fcss);//cerrar archivo css
        //Cargar archivo html   
            $shtml = file_get_contents('plantilla/mensaje1.html');
        //reemplazar sección de plantilla html con el css cargado y mensaje creado
            $incss  = str_replace('<style id="estilo"></style>',"<style>$scss</style>",$shtml);
            $cuerpo = str_replace('<p id="mensaje"></p>',$sMensaje,$incss);
        $mail->Body = $cuerpo; //cuerpo del mensaje
        $mail->AltBody = '---';//Mensaje de sólo texto si el receptor no acepta HTML

    //CONFIGURACIÓN DE ARCHIVOS ADJUNTOS 
        $mail->addAttachment($sAdjunto);

    //CONFIGURACIÓN DE RECEPTORES
        $aDestino = explode(",",$sDestino);
        foreach ( $aDestino as $i => $sDest){
            $mail->addAddress(trim($sDest), "Destinatario ".$i+1);
        }
    //ENVIAR MENSAJE
    if (!$mail->send()) {
        echo "Error al enviar: " . $mail->ErrorInfo;
    } else {
        echo "Mensaje enviado correctamente";
        //eliminar archivos temporales de carpeta subidas
        unlink($sImagen);
        unlink($sAdjunto);
    }
?>

Mensaje1.html: шаблон сообщения

<!DOCTYPE html>
<html>
<head>
    <title> Mensaje HTML </title>
    <style id="estilo"></style>
</head>
<body>
    <H1>Este es un mensaje HTML+CSS+IMAGEN+ADJUNTO</H1><br>
    <p id="mensaje"></p><br>
    <img src="cid:imagen" height="100px" width="100px">
</body>
</html>

Стиль. css

h1 {
    color:#ff0000;
}
p {
    color:#0000ff;
}

ДОКАЗАТЕЛЬСТВО ДОСТАВКИ
introducir la descripción de la imagen aquí

В ЛОТКЕ

introducir la descripción de la imagen aquí

СООБЩЕНИЕ

introducir la descripción de la imagen aquí introducir la descripción de la imagen aquí

 6
Author: Jorny, 2017-04-29 12:24:10

Привет добрый день то, что я сделал, это то, что в том же файле отправки я помещаю код шаблона, сохраняя его в переменной следующим образом:

$content = '<html>';
$content .= '<head>' ;
$content .= '<style>';
$content .= '.h1{ padding-top:40px; padding-left:250px; padding-bottom:10px;}';
$content .= '.h2{ font-style: italic;  font-size:25px; padding-left: 360px; padding-top:0px;  position:absolute; whith:10px; }';
$content .= '.tel{padding-left:250px; padding-top:60px;}';
$content .= 'h1 { color:green; font-style: italic; font-size:30px ;}';
$content .= 'td {  border: black 1px solid}';
$content .= '.tdr { text-align:left; }';

$content .= '.td { text-align:center; padding-left:100px; padding-right:100px;  padding-top: 2px; padding-bottom: 2px; border-color: black; }';
$content .= '.td1 { background-color:white; border-color:white; padding-left:30px;padding-right:30px; }';
$content .= '.td2 { border-color: white; padding:15px; padding-top:5px; }';
$content .= '.td3 { background-color:white; border-color:white; padding-left:60px;padding-right:60px; }';
$content .= '.td4 { padding-left:60px;padding-right:60px; border-color: white; padding-top:10px; padding-bottom:10px;}';
$content .= '.table1 { text-align:center; border:0px solid black; padding:1px; position:relative; top:80px;left:10px;}';
$content .= '.table2 { border:1px solid black; padding:1px; position:relative; top:80px;left:10px;border-collapse: collapse;}';
$content .= '.table3 { text-align:center; border:0px solid black; padding:1px; position:relative; top:100px;left:10px;}';



$content .= '</style>';
$content .= '</head><body>';


$content .= '<table class="table1"> <tr>';puedes concatenar asi las variables como la de asunto
$content .= '<td class="td1">Asunto: '.$asunto.'</td></tr>';
Вся эта переменная отправляется с функцией $mail - >MsgHTML ($content);
 1
Author: Alejandro hernandez guzman, 2017-04-29 13:46:28
<!DOCTYPE html>

PHPMailer-GMail SMTP test

/ / Мы создаем новый экземпляр $mail = new PHPMailer ();

/ / мы активируем службу SMTP $mail - >isSMTP (); / / мы включаем / выключаем "debug" SMTP / / 0 = OFF / / 1 = сообщение клиента / / 2 = сообщение клиента и сервера $ mail - >SMTPDebug = 2;

/ / журнал отладки SMTP в формате HTML $mail - >Debugoutput = 'html';

/ / SMTP-сервер (для этого примера мы используем gmail) $mail - >Host = 'smtp.gmail.com';

/ / SMTP-порт $mail - >Port = 587;

/ / тип шифрования SSL больше не используется TSL рекомендуется $mail - >SMTPSecure = 'tls';

/ / Если нам нужно пройти аутентификацию $mail - >SMTPAuth = true;

/ / пользователь почты, с которой мы хотим отправить, для Gmail не забудьте использовать полного пользователя ([email protected]) $mail - >Username = "[email protected]";

// Пароль $mail - >Password = "учитьпрограммировать";

// Мы подключаемся к базе данных $db = new mysqli('hostname', 'user', 'cotraseña', 'basededata');

If ($db->connect_errno > 0) { die ('невозможно подключить ['. $db->connect_error.']'); }

/ / Мы создаем операторы SQL $result = $db->query("SELECT * FROM people");

/ / мы запускаем "цикл" для отправки нескольких писем.

While($row = $result->fetch_assoc()) { // Мы добавляем адрес того, кто отправляет бежит, в этом случае Codejobs, сначала письмо, затем имя того, кто его отправляет.

$mail->setFrom('[email protected]', 'CodeJobs!'); 
$mail->addAddress($row['PersonasEmail'], $row['PersonasNombre']); 

//La linea de asunto 
$mail->Subject = 'Bienvenido a Codejobs!'; 

// La mejor forma de enviar un correo, es creando un HTML e insertandolo de la siguiente forma, PHPMailer permite insertar, imagenes, css, etc. (No se recomienda el uso de Javascript) 

$mail->msgHTML(file_get_contents('contenido.html'), dirname(__FILE__)); 

// Enviamos el Mensaje 
$mail->send(); 

// Borramos el destinatario, de esta forma nuestros clientes no ven los correos de las otras personas y parece que fuera un único correo para ellos. 
$mail->ClearAddresses(); 

}
?>

Оцените@, проверьте эту ссылку, отправка массовых или простых писем с PHP, MySQLi и PHPMailer

 -1
Author: Richard A Martinez G, 2017-04-30 22:22:16