PHP: socket_mail() – an alternative to mail()

by CarcaBot on July 24, 2009 · 0 comments

If your host has disabled the nobody account (a common practice to prevent spamming), you won't be able to send emails by using the PHP mail() function anymore. This is an alternative function, called socket_mail()

<?php

$subject = 'test email';
$message = 'this is a test';
$to = array("name <name@email.com>", "name2 <name2@email.com>");

socket_mail($to, $subject, $message);

function socket_mail($toArray, $subject, $message) {

  // Setup
  $fromName = "your name";
  $fromEmail = "your admin email address";
  $fromMailer = "Socketmail v2.0";
  $smtp = "localhost";
  $smtp_port = 25;
  $charset = "ISO-8859-1";

  // Strip "r" from the message (if it came from a form input)
  $message = str_replace(chr(13), "", $message);

  // Add a message signature (optional)
  $message .= "nn".str_repeat("_", 60)."n";
  $message .= "$fromName <$fromEmail>n";

  $message = str_replace("rn.", "rn..", str_replace("n", "rn", stripslashes($message))." rn");

  ini_set(sendmail_from, $fromEmail);

  $connect = @fsockopen ($smtp, $smtp_port, $errno, $errstr, 5);
    if (!$connect) return false;
    $rcv = fgets($connect, 1024);

  fputs($connect, "HELO {$_SERVER['SERVER_NAME']}rn");
    $rcv = fgets($connect, 1024);

  foreach ($toArray as $to) {

    $toBits = explode(" ", $to);
    $toRcpt = trim($toBits[count($toBits)1], "<> ");

    fputs($connect, "RSETrn");
      $rcv = fgets($connect, 1024);

    fputs($connect, "MAIL FROM:$fromEmailrn");
      $rcv = fgets($connect, 1024);
    fputs($connect, "RCPT TO:$toRcptrn");
      $rcv = fgets($connect, 1024);
    fputs($connect, "DATArn");
      $rcv = fgets($connect, 1024);

    fputs($connect, "Subject: $subjectrn");
    fputs($connect, "From: $fromName <$fromEmail>rn");
    fputs($connect, "To: $torn");
    fputs($connect, "X-Sender: <$fromEmail>rn");
    fputs($connect, "Return-Path: <$fromEmail>rn");
    fputs($connect, "Errors-To: <$fromEmail>rn");
    fputs($connect, "Message-Id: <".md5(uniqid(rand())).".".preg_replace("/[^a-z0-9]/i", "", $fromName)."@$smtp>rn");
    fputs($connect, "X-Mailer: PHP – $fromMailerrn");
    fputs($connect, "X-Priority: 3rn");
    fputs($connect, "Date: ".date("r")."rn");
    fputs($connect, "Content-Type: text/plain; charset=$charsetrn");
    fputs($connect, "rn");
    fputs($connect, $message);

    fputs($connect, "rn.rn");
      $rcv = fgets($connect, 1024);
  }

  fputs ($connect, "QUITrn");
    $rcv = fgets ($connect, 1024);
  fclose($connect);
  ini_restore(sendmail_from);
  return true;
}
?>

Previous post:

Next post: