mail formulario example enviar ejemplo correo php smtp phpmailer smtp-auth

formulario - phpmailer example



Envío de correos electrónicos a través de SMTP con PHPMailer (8)

Esto puede parecer como una toma en la oscuridad, pero asegúrese de que PHP se haya cumplido con OpenSSL si SMTP requiere SSL.

Para verificar usa phpinfo()

¡Espero eso ayude!

Estoy tratando de enviar correos electrónicos SMTP usando PHPMailer, pero sigo recibiendo este mensaje de error, ¿alguna idea de cómo deshacerme de él?
Estoy intentando conectarme a través de SSL en el puerto 465.

SMTP -> FROM SERVER: SMTP -> FROM SERVER: SMTP -> ERROR: EHLO not accepted from server: Notice: fputs() [function.fputs]: send of 18 bytes failed with errno=32 Roura přerušena (SIGPIPE) in /home/www/amazonek.cz/subdomains/library/PHPMailer_v5.1/class.smtp.php on line 494 SMTP -> FROM SERVER: SMTP -> ERROR: HELO not accepted from server: Notice: fputs() [function.fputs]: send of 12 bytes failed with errno=32 Roura přerušena (SIGPIPE) in /home/www/amazonek.cz/subdomains/library/PHPMailer_v5.1/class.smtp.php on line 212 SMTP -> ERROR: AUTH not accepted from server: SMTP Error: Could not authenticate.

Mi código:

require_once(''../library/PHPMailer_v5.1/class.phpmailer.php''); try{ $mail = new PHPMailer(true); $mail->IsSMTP(); $mail->SMTPAuth = true; $mail->Host = SMTP_SERVER; $mail->Port = SMTP_PORT; $mail->Username = SMTP_USERNAME; $mail->Password = SMTP_PASSWORD; $mail->SMTPDebug = 2; $mail->SetFrom(MAIL_ORDERS_ADDRESS, MAIL_ORDERS_NAME); $mail->Subject = ''AMAZONEK.cz - objednávka číslo ''.$_SESSION[''orderId'']; $mail->MsgHTML(''<b>Ahoj</b>''); $mail->AddAddress($_SESSION[''user''][''email''], $_SESSION[''user''][''name''].'' ''.$_SESSION[''user''][''surname'']); $mail->AddBCC(MAIL_ORDERS_ADDRESS, MAIL_ORDERS_NAME); if(!$mail->Send()) throw new Exception($mail->ErrorInfo); } catch(Exception $e){ echo $e->getMessage(); }

Definición de constantes:

define(''SMTP_SERVER'', ''smtp.ebola.cz''); define(''SMTP_PORT'', 465); define(''SMTP_USERNAME'', ''[email protected]''); define(''SMTP_PASSWORD'', ''***CENSORED***''); define(''MAIL_ORDERS_ADDRESS'', ''[email protected]''); define(''MAIL_ORDERS_NAME'', ''My Name'');

¿Algunas ideas?


Intente enviar un correo electrónico a través de ese servidor SMTP manualmente / desde un programa de correo electrónico interactivo (por ejemplo, Mozilla Thunderbird). A partir de los errores, parece que el servidor no aceptará sus credenciales. ¿Se está ejecutando SMTP en el puerto o es SSL + SMTP? Parece que no estás utilizando una conexión segura en el código que has publicado, y no estoy seguro de si PHPMailer realmente admite SSL + SMTP.

(El primer resultado de googlear el nombre de host de su servidor SMTP: http://podpora.ebola.cz/idx.php/0/006/article/Strucny-technicky-popis-nastaveni-sluzeb.html parece decir "SMTPs mail sending: secure Conexión SSL, puerto: 465 ".)

Parece que PHPMailer no es compatible con SSL; al menos de esto . Entonces, necesitarás cambiar esto:

define(''SMTP_SERVER'', ''smtp.ebola.cz'');

dentro de esto:

define(''SMTP_SERVER'', ''ssl://smtp.ebola.cz'');


Por lo que puedo ver, todo está bien con tu código. Tu error es:

Error de SMTP: no se pudo autenticar.

Lo que significa que las credenciales que ha enviado son rechazadas por el servidor SMTP. Asegúrese de que el host, el puerto, el nombre de usuario y la contraseña sean buenos.

Si quiere usar TLS, intente agregar:

$mail->SMTPSecure = ''tls'';

Si desea usar SSL, intente agregar:

$mail->SMTPSecure = ''ssl'';

Manten eso en mente:

  • Algunos servidores SMTP pueden prohibir las conexiones de "personas externas".
  • Algunos servidores SMTP no admiten conexiones SSL (o TLS).

Tal vez este ejemplo puede ayudar (GMail secure SMTP).


Sí, necesita que OpenSSL funcione correctamente. Mi sitio de prueba de respaldo funcionó, mi servidor en vivo no. ¿Diferencia? El servidor en vivo no tenía OpenSSL dentro de la configuración de PHP.


SMTP -> DESDE EL SERVIDOR:
SMTP -> DESDE EL SERVIDOR:
SMTP -> ERROR: EHLO no aceptado desde el servidor:

eso es típico de tratar de conectarse a un servicio SSL con un cliente que no usa SSL

Error de SMTP: no se pudo autenticar.

ninguna sorpresa que no haya podido iniciar una autentificación de conversación SMTP no es una opción.

phpmailer no hace SSL implícito (también conocido como TLS on connect, SMTPS). A menos que reescriba smtp.class.php para incluir soporte allí, no hay forma de hacer lo que usted pide.

Use el puerto 587 con SSL explícito (también conocido como TLS, STARTTLS).


Tuve un problema muy similar durante algo así como una hora, hasta que descubrí lo que salió mal. Mi problema fue que utilicé SSL en lugar de SSL . La verificación es sensible a mayúsculas y minúsculas en el código. AlexV me guió a la fuente del problema. Ese helo / ehlo-material parece irrelevante.


Pruebe el puerto 25 en lugar de 456.

Obtuve el mismo error cuando uso el puerto 456, y cambiarlo a 25 me funcionó.


Cliente smtp simple con socket de corriente php con el comando tls / ssl smtp STARTTLS: https://github.com/breakermind/PhpMimeParser/blob/master/PhpSmtpSslSocketClient.php

trabaja con gmail.com con autenticación:

<?php // Login email and password $login = "[email protected]"; $pass = "123456"; ini_set(''display_errors'', 1); ini_set(''display_startup_errors'', 1); error_reporting(E_ALL); $ctx = stream_context_create(); stream_context_set_option($ctx, ''ssl'', ''verify_peer'', false); stream_context_set_option($ctx, ''ssl'', ''verify_peer_name'', false); try{ // echo $socket = stream_socket_client(''ssl://smtp.gmail.com:587'', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); echo $socket = stream_socket_client(''tcp://smtp.gmail.com:587'', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); if (!$socket) { print "Failed to connect $err $errstr/n"; return; }else{ // Http // fwrite($socket, "GET / HTTP/1.0/r/nHost: www.example.com/r/nAccept: */*/r/n/r/n"); // Smtp echo fread($socket,8192); echo fwrite($socket, "EHLO cool.xx/r/n"); echo fread($socket,8192); // Start tls connection echo fwrite($socket, "STARTTLS/r/n"); echo fread($socket,8192); echo stream_socket_enable_crypto($socket, true, STREAM_CRYPTO_METHOD_SSLv23_CLIENT); // Send ehlo echo fwrite($socket, "EHLO cool.xx/r/n"); echo fread($socket,8192); // echo fwrite($socket, "MAIL FROM: <[email protected]>/r/n"); // echo fread($socket,8192); echo fwrite($socket, "AUTH LOGIN/r/n"); echo fread($socket,8192); echo fwrite($socket, base64_encode($login)."/r/n"); echo fread($socket,8192); echo fwrite($socket, base64_encode($pass)."/r/n"); echo fread($socket,8192); echo fwrite($socket, "rcpt to: <[email protected]>/r/n"); echo fread($socket,8192); echo fwrite($socket, "DATA/n"); echo fread($socket,8192); echo fwrite($socket, "Date: ".time()."/r/nTo: <[email protected]>/r/nFrom:<[email protected]/r/nSubject:Hello from php socket tls/r/n./r/n"); echo fread($socket,8192); echo fwrite($socket, "QUIT /n"); echo fread($socket,8192); /* Turn off encryption for the rest */ // stream_socket_enable_crypto($fp, false); fclose($socket); } }catch(Exception $e){ echo $e; }