2015-07-31 10 views
1

Я пытаюсь отправить электронные письма через GMAIL SMTP с php.Отправка электронной почты с использованием SMTP gmail из PHP

Когда я нажимаю на отправку веб-сайта, задерживается на некоторое время, а затем переходит в нормальное состояние, когда электронные письма не отправляются.

Я пробовал как для порта ssl - 495, так и для tls - 587.

function sendEmail() { 

    require_once 'PHPMailer-master/class.phpmailer.php';   
    $email = new PHPMailer(); 
    $email ->isSMTP(); 
    $email->SMTPDebug = '1'; 
    $email->SMTPAuth = true; 
    $email->SMTPSecure = 'tls'; 
    $email->Host = "smtp.gmail.com"; 
    $email ->port = 587; 
    $email->Username = "[email protected]"; 
    $email -> password = "xxxxx"; 
    $email ->setFrom("[email protected]"); 
    $email -> Subject = "Hello World"; 
    $email->Body = "Hello this body"; 
    $email ->addAddress("[email protected]"); 
    if(!$email ->send()){ 
     echo $email ->ErrorInfo; 
    } 
    else{ 
     echo "email sent"; 
    } 
} 

ответ

0

порт SMTP Gmail является 465, а не 495. Кроме того, установить режим отладки 2, так что вы можете увидеть ошибки сервера, если таковые имеются.

Проверьте, активирована ли ваша учетная запись gmail с двухэтапной аутентификацией. Он активируется, деактивирует его.

Проверьте эту функцию. Надеюсь, поможет.

function sendEmail() { 
    require 'PHPMailerAutoload.php'; 
    $mail = new PHPMailer(); 
    $mail->isSMTP(); 
    $mail->SMTPDebug = 2; //2 for both client and server side response 
    $mail->Debugoutput = 'html'; 
    $mail->Host = 'smtp.gmail.com'; 
    $mail->Port = 587; 
    $mail->SMTPSecure = 'tls'; 
    $mail->SMTPAuth = true; 
    $mail->Username = "[email protected]";//sender's gmail address 
    $mail->Password = "mypassword";//sender's password 
    $mail->setFrom('[email protected]', 'Barack Obama');//sender's incormation 
    $mail->addReplyTo('[email protected]', 'Barack Obama');//if alternative reply to address is being used 
    $mail->addAddress('[email protected]', 'George Bush');//receiver's information 
    $mail->Subject = 'Howdy!';//subject of the email 
    $mail->msgHTML("Have a good day!"); 
    $mail->AltBody = 'If you can\'t view the email, contact us'; 
    $mail->addAttachment('images/logo.png');//some attachment 

    if (!$mail->send()) { 
     return false; //not sent 
    } else { 
     return true; //sent 
    } 
} 
0

Или просто с SSL сокет:

<?php 
// Send with smtp ssl 
// ini_set("SMTP","ssl://smtp.gmail.com"); 
// ini_set("smtp_port","465"); 

// 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; 
} 
Смежные вопросы