Post by Daniel » Wed Aug 12, 2009 5:59 am

I'm not very good with sending emails over SMTP.

Does any know why a simple function like this would not send mail over gmail?

Code: Select all

function another_mail($to,$subject,$headers,$message) 
{ 
 // Could get this from the php ini? 
 $from="me@example.com"; 
 list($me,$mydomain) = split("@",$from); 

 // Now look up the mail exchangers for the recipient 
 list($user,$domain) = split("@",$to,2); 
 if(getmxrr($domain,$mx,$weight) == 0)  return FALSE; 

 // Try them in order of lowest weight first 
 array_multisort($mx,$weight); 
 $success=0; 

 foreach($mx as $host) { 
  // Open an SMTP connection 
  $connection = fsockopen ($host, 25, $errno, $errstr, 1); 
  if (!$connection) 
    continue; 
  $res=fgets($connection,256); 
  if(substr($res,0,3) != "220") break; 

  // Introduce ourselves 
  fputs($connection, "HELO $mydomain\n"); 
  $res=fgets($connection,256); 
  if(substr($res,0,3) != "250") break; 

  // Envelope from 
  fputs($connection, "MAIL FROM: $from\n"); 
  $res=fgets($connection,256); 
  if(substr($res,0,3) != "250") break; 

  // Envelope to 
  fputs($connection, "RCPT TO: $to\n"); 
  $res=fgets($connection,256); 
  if(substr($res,0,3) != "250") break; 

  // The message 
  fputs($connection, "DATA\n"); 
  $res=fgets($connection,256); 
  if(substr($res,0,3) != "354") break; 

  // Send To:, From:, Subject:, other headers, blank line, message, and finish 
  // with a period on its own line. 
  fputs($connection, "To: $to\nFrom: $from\nSubject: $subject\n$headers\n\n$message\n.\n"); 
  $res=fgets($connection,256); 
  if(substr($res,0,3) != "250") break; 

  // Say bye bye 
  fputs($connection,"QUIT\n"); 
  $res=fgets($connection,256); 
  if(substr($res,0,3) != "221") break; 

  // It worked! So break out of the loop which tries all the mail exchangers. 
  $success=1; 
  break; 
 } 
 // Debug for if we fall over - uncomment as desired 
 // print $success?"Mail sent":"Failure: $res\n"; 
 if($connection) { 
  if($success==0) fputs($connection, "QUIT\n"); 
  fclose ($connection); 
 } 
 return $success?TRUE:FALSE; 
} 

another_mail("recipient@example.com","My Subject","X-mailer: PHP Script\nX-another-header: Whatever","Test email body.\n\nNote if you actually put a period on a line\nby itself, the function will terminate prematurely.\n\nYou will get a partial email sent though.\n"); 


OpenCart®
Project Owner & Developer.


User avatar
Administrator

Posts

Joined
Fri Nov 03, 2006 6:57 pm

Post by bthirsk » Wed Aug 12, 2009 8:50 pm

I'd check the mail server logs.
You might find it is sending the mail, but due to invalid email address,
the recipient server is rejecting it.
I have my server route all outgoing mail through a valid email address.

Active Member

Posts

Joined
Wed Sep 03, 2008 11:33 am
Location - Canada
Who is online

Users browsing this forum: No registered users and 13 guests