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!";
}
?>
3 answers
Здесь код для отправки электронной почты с PHPMailer, это позволяет:
1. Доставка с Localhost
2. HTML-сообщение с CSS и встроенными изображениями
3. Поддержка Тильды и Eñes (UTF-8)
4. Вложение
5. Несколько получателей
Структура папок
- 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;
}
В ЛОТКЕ
СООБЩЕНИЕ
Привет добрый день то, что я сделал, это то, что в том же файле отправки я помещаю код шаблона, сохраняя его в переменной следующим образом:
$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>';
<!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