Skip to content

Instantly share code, notes, and snippets.

@gostrafx
Created May 19, 2019 22:46
Show Gist options
  • Save gostrafx/75cd03006b25bfaa6a41c486e0250af2 to your computer and use it in GitHub Desktop.
Save gostrafx/75cd03006b25bfaa6a41c486e0250af2 to your computer and use it in GitHub Desktop.
smtp php

<?php

$address = 'smtp.mail.ru'; 
$port    = 25;        
$login   = 'mail';    
$pwd    = 'pass';    
$from   = '[email protected]';  

$to  = '[email protected]';  

$subject = c("edit1")->text;      
$message = c("memo1")->text; 

try{ 

  $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); 
  if ($socket < 0) { 
    throw new Exception('socket_create() failed: '.socket_strerror(socket_last_error())."\n");
  } 
  $result = socket_connect($socket, $address, $port); 
  if ($result === false) { 
    throw new Exception('socket_connect() failed: '.socket_strerror(socket_last_error())."\n"); 
  } 

  read_smtp_answer($socket); 
  write_smtp_response($socket, 'EHLO '.$login); 
  read_smtp_answer($socket); 
  write_smtp_response($socket, 'AUTH LOGIN'); 
  read_smtp_answer($socket);
  write_smtp_response($socket, base64_encode($login)); 
  read_smtp_answer($socket); 
  write_smtp_response($socket, base64_encode($pwd)); 
  read_smtp_answer($socket); 
  write_smtp_response($socket, 'MAIL FROM:<'.$from.'>'); 
  read_smtp_answer($socket); 
  write_smtp_response($socket, 'RCPT TO:<'.$to.'>'); 
  read_smtp_answer($socket); 
  write_smtp_response($socket, 'DATA'); 
  read_smtp_answer($socket);

  $message = "To: $to\r\n".$message; 
  $message = "Subject: $subject\r\n".$message; 
  write_smtp_response($socket, $message."\r\n."); 
  read_smtp_answer($socket); 

  write_smtp_response($socket, 'QUIT'); 
  read_smtp_answer($socket);

}catch(Exception $e){ 
  echo "\nError: ".$e->getMessage(); 
} 

/**
if (isset($socket)) { 
  socket_close($socket); 
} 
**/

function read_smtp_answer($socket){ 

  $read = socket_read($socket, 1024); 
  if ($read{0} != '2' && $read{0} != '3'){

    if (!empty($read)){
    	throw new Exception('SMTP failed: '.$read."\n"); 
    }else{
    	throw new Exception('Unknown error'."\n");
    } 
  } 

} 

function write_smtp_response($socket, $msg){ 
  $msg = $msg."\r\n"; 
  socket_write($socket, $msg, strlen($msg)); 
} 
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment