Como ya he explicado en la entrada https://programacionconphp.com/enviar-email-php/ desde Mayo de 2022 google ya no deja enviar correos como aplicaciones no seguras y ahora se necesita crear uan contraseña de aplicación.
Con esta pequeña entrada os voy a explicar como conseguir una contraseña de apliación paso a paso.

Lo primero que necesitaremos es habilitar la verificación en dos pasos y lo haremos clicando en :
Gestionar tu cuenta de Google –> Seguridad –> Verificación en dos pasos

Nos pedira un numero de telefono para autenticar la cuenta y una vez que lo tengamos hecho el paso siguiente sera generar la contraseña de aplicación.

Clicaremos en Gestionar tu cuenta de Google –> Seguridad –> Contraseña de aplicaciones, seleccionamos Otra y ponemos el nombre que queramos.

Y por ultimos clicamos en GENERAR y obtendremos la contraseña a utilizara para enviar los correos.

A continuaciónn hoy voy a explicar un ejemplo de como enviar un email utilizando gmail como medio de envio.
La aplicación se va a componer en dos ficheros, index.html que sera el formulario a rellenar y send.php que se encargara de realziar el envió del mail en php.
Empezaremos con el fichero index.php y lo primero que vamos a hacer es añadir son las librerias de bootstrap como ya explique en la entrada aplicar-estilos-a-un-menu-dinamico-en-php-con-bootstrap.
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</head>
Y a continuación añadiré el formulario con los inputs necesarios, asunto, destinatario y cuerpo del mensaje y en action incluire el fichero send.php que se encargara de realizar el envio.
<form method="POST" action="send.php">
<label for="subject">Asunto:
<input type="text" name="subject" id="subject">
</label>
<br>
<label for="email">Email destinatario:
<input type="email" name="email" id="email">
</label>
<br>
<label for="message">Mensaje:
<textarea name="message" id="message" rows="8" cols="20"></textarea>
</label>
<br>
<input type="submit" value="Send">
</form>
Ahora voy a crear el fichero send.php y lo primero que voy a hacer es incluir la librería phpmailer.
require 'PHPMailer/PHPMailerAutoload.php';
La libreria la he obtenido de github la version mas reciente. https://github.com/PHPMailer/PHPMailer/tree/5.2-stable
El siguiente paso es instanciar la clase phmailer e incluir los datos smtp del servidor de gmail.
//Create a new PHPMailer instance
$mail = new PHPMailer();
$mail->IsSMTP();
//Configuracion servidor mail
$mail->From = "mail@gmail.com"; //remitente
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls'; //seguridad
$mail->Host = "smtp.gmail.com"; // servidor smtp
$mail->Port = 587; //puerto
$mail->Username ='mail@gmail.com'; //nombre usuario
$mail->Password = 'password'; //contraseña
Ahora añadimos el asunto, destinatario y cuerpo del mensaje recibiéndolo del post del formulario.
//Agregar destinatario
$mail->AddAddress($_POST['email']);
$mail->Subject = $_POST['subject'];
$mail->Body = $_POST['message'];
Y por ultimo enviamos el mail, usando una condición y enviado una alerta si no se puede enviar.
//Avisar si fue enviado o no y dirigir al index
if ($mail->Send()) {
echo'<script type="text/javascript">
alert("Enviado Correctamente");
</script>';
} else {
echo'<script type="text/javascript">
alert("NO ENVIADO, intentar de nuevo");
</script>';
}
El codigo final es el siguiente:
index.php
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta charset="UTF-8">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
</head>
<body>
<h1>Enviar mail</h1>
<form method="POST" action="send.php">
<label for="subject">Asunto:
<input type="text" name="subject" id="subject">
</label>
<br>
<label for="email">Email destinatario:
<input type="email" name="email" id="email">
</label>
<br>
<label for="message">Mensaje:
<textarea name="message" id="message" rows="8" cols="20"></textarea>
</label>
<br>
<input type="submit" value="Send">
</form>
</body>
</html>
send.php
<?php
//librerias
require 'PHPMailer/PHPMailerAutoload.php';
//Create a new PHPMailer instance
$mail = new PHPMailer();
$mail->IsSMTP();
//Configuracion servidor mail
$mail->From = "mail@gmail.com"; //remitente
$mail->SMTPAuth = true;
$mail->SMTPSecure = 'tls'; //seguridad
$mail->Host = "smtp.gmail.com"; // servidor smtp
$mail->Port = 587; //puerto
$mail->Username ='mail@gmail.com'; //nombre usuario
$mail->Password = 'password'; //contraseña
//Agregar destinatario
$mail->AddAddress($_POST['email']);
$mail->Subject = $_POST['subject'];
$mail->Body = $_POST['message'];
//Avisar si fue enviado o no y dirigir al index
if ($mail->Send()) {
echo'<script type="text/javascript">
alert("Enviado Correctamente");
</script>';
} else {
echo'<script type="text/javascript">
alert("NO ENVIADO, intentar de nuevo");
</script>';
}
Y el codigo lo podeis obtener aqui: https://github.com/victorgarciasisi/enviarEmailPHP
para que no llegue a la carpeta de no deseado teneis que poner esto tambien
$mail->FromName = «from lo que quieras»;